我如何使用nodejs从joi验证“位数”?

时间:2019-09-18 12:53:17

标签: node.js mongoose joi

我希望如果输入字段中的位数少于/大于14(例如),那么joi应该返回错误。

我该如何使用数字类型而不是字符串。

7 个答案:

答案 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)

您可以使用minmax方法。

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