【问题标题】:Hapi/Joi Validation For Number Fails号码的 Hapi/Joi 验证失败
【发布时间】:2019-08-03 16:39:54
【问题描述】:

我正在尝试验证将包括整数和浮点值的数值。以下是我的实现。

Joi 架构。

const numcheckschema = Joi.object().keys({
  v1:Joi.number().empty("").allow(null).default(99999),
  v2:Joi.number().empty("").allow(null).default(99999),
  v3:Joi.number().empty("").allow(null).default(99999)
})

对象

objnum={
  v1:"15",
  v2:"13.",
  v3:"15"
}

objValidated = Joi.validate(objnum, numcheckschema);
console.log(objValidated);

当我执行上述代码时,我得到一个错误

ValidationError: child "v2" 失败,因为 ["v2" 必须是数字]

根据文档,当我们尝试将任何 numeric value 作为 string 传递时,它会将值转换为数字,但在这种情况下,我的值​​为 13 . 无法转换为数字并抛出错误。

有什么方法可以将这个值转换为13.0

【问题讨论】:

    标签: node.js validation schema joi hapi


    【解决方案1】:

    您可以使用正则表达式来匹配带点的数字,例如:

    Joi.string().regex(/\d{1,2}[\,\.]{1}/)
    

    然后使用 Joi.alternatives 结合两个验证:

    Joi.alternatives().try([
          Joi.number().empty("").allow(null),
          Joi.string().regex(/\d{1,2}[\,\.]{1}/)
    ])
    

    但是,我认为您可能需要使用 Number(string value) 将有效负载转换为数字。需要检查payload的类型,如果不是数字,需要转换一下。

    如果您想进一步了解示例中使用的正则表达式,可以在这里进行测试:https://regexr.com/

    【讨论】:

    • 感谢我将实施和检查的解决方案
    猜你喜欢
    • 2018-09-24
    • 2013-10-19
    • 2015-07-01
    • 2019-10-10
    • 2020-05-30
    • 2018-05-25
    • 2018-07-25
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多