我希望如果输入字段中的位数少于/大于14(例如),那么joi应该返回错误。
我该如何使用数字类型而不是字符串。
答案 0 :(得分:4)
下面给出了10位数字手机号码的验证
joi.string().length(10).pattern(/^[0-9]+$/).required(),
您应该根据需要更改规则。 pattern(您的正则表达式)仅用于接受数字,length()用于验证接受多少字符验证,并且仅可用于字符串函数。
答案 1 :(得分:1)
很不幸,Hapi / joi目前没有数字的数字计数检查。虽然Sachin Shah必须将数字转换为字符串是正确的,但还必须将正则表达式传递给验证器以确保仅允许数字值:
joi.string().length(14).regex(/^\d+$/)
答案 2 :(得分:0)
您可以使用min
和max
方法。
joi.number().min(14)
joi.number().max(14)
如果字符串很好,那么您也可以这样做。
joi.string().length(14).required()
在读取数据库操作数据时,可以将+
与value一起使用。它将您的字符串转换为整数。但是,如果数据库是mysql,请确保您的数据库允许该大值作为整数。我建议您将用户字符串作为数据类型。
let obj = {
number: +req.body.number
}
答案 3 :(得分:0)
例如birth_year是1900年至2013年之间的整数
birth_year: Joi.number()
.integer()
.min(1900)
.max(2013)
您可以像这样将号码与joi一起使用。供参考Official Readme
像这样,您可以传递您的最小值和最大值进行验证
答案 4 :(得分:0)
您可以使用自定义验证器
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")
return value
})
}).validate({
phone: '+79002940163'
});
文档: https://github.com/hapijs/joi/blob/master/API.md#anycustommethod-description
答案 5 :(得分:0)
下面给出了带有自定义错误消息的10位数字手机号码的验证
joi.string().regex(/^[0-9]{10}$/).messages({'string.pattern.base': `Phone number must have 10 digits.`}).required()
答案 6 :(得分:0)
Joi 默认情况下会转换字符串,这一切都在 documentation 中。在该特定架构上全局禁用 convert 或使用 strict。