我希望如果输入字段中的位数小于/大于14(例如(,那么joi应该返回错误。
我如何使用非字符串的数字类型来做到这一点。
下面给出了 10 位数字手机号码的验证
joi.string().length(10).pattern(/^[0-9]+$/).required(),
模式(您的正则表达式(用于仅接受数字,length(( 用于验证接受多少个字符验证并且仅适用于字符串函数。
不幸的是,happy/joi 目前没有数字计数检查。虽然 Sachin Shah 是正确的,您必须将数字转换为字符串,但您还必须将正则表达式传递给验证器以确保只允许数值:
joi.string().length(14).regex(/^d+$/)
下面给出了带有自定义错误消息的 10 位数字移动号码的验证
joi.string().regex(/^[0-9]{10}$/).messages({'string.pattern.base': `Phone number must have 10 digits.`}).required()
您可以使用自定义验证器
Joi.object({
phone: Joi
.string()
.custom((value, helper) => {
// you can use any libs for check phone
if (!checkPhone(value)) {
return helper.message("phone is incorrect");
} // this is what was added
return value
})
}).validate({
phone: '+79002940163'
});
文档: https://github.com/hapijs/joi/blob/master/API.md#anycustommethod-description
For Mobile number:
mobile: Joi.number().integer().min(10 ** 9).max(10 ** 10 - 1).required().messages({
'number.min': 'Mobile number should be 10 digit.',
'number.max': 'Mobile number should be 10 digit'
})
For other digit check:
yourparam: Joi.number().integer().min(1000).max(9999).required().messages({
'number.min': 'OTP should be 4 digit.',
'number.max': 'OTP should be 4 digit'
})
例如birth_year 1900 到 2013 之间的整数
birth_year: Joi.number()
.integer()
.min(1900)
.max(2013)
你可以像这样用 joi 来表示数字。供参考 官方自述文件
像这样,您可以传递最小值和最大值以进行验证
Joi 默认可以转换字符串,这都在文档中。全局禁用转换或对该特定架构使用严格。
minCount: Joi.number().strict()
如果您使用的是@hapi/joi
您可以使用它的min
和max
方法。
joi.number().min(14)
joi.number().max(14)
如果字符串没问题,那么您也可以这样做。
joi.string().length(14).required()
当您读取数据库操作的数据时,您可以将+
与值一起使用。它会将您的字符串转换为整数。但是,如果数据库是 mysql,请确保您的数据库允许这个大值作为整数。我建议您将用户字符串作为数据类型。
let obj = {
number: +req.body.number
}