如何使用nodejs验证joi的"number of digits"?



我希望如果输入字段中的位数小于/大于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

您可以使用它的minmax方法。

joi.number().min(14)
joi.number().max(14)

如果字符串没问题,那么您也可以这样做。

joi.string().length(14).required()

当您读取数据库操作的数据时,您可以将+与值一起使用。它会将您的字符串转换为整数。但是,如果数据库是 mysql,请确保您的数据库允许这个大值作为整数。我建议您将用户字符串作为数据类型。

let obj = {
number: +req.body.number
}

相关内容

最新更新