我试图验证数值,包括整数和浮点值。以下是我的实现。
星期四架构。
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:子“v2”失败,因为[“v2”必须是数字]
根据文档,当我们尝试将任何数值作为字符串传递时,它将值转换为数字,但在这种情况下,我的值为13.这不能转换为数字并抛出错误。
有什么办法可以将这个值转换为13.0
您可以使用正则表达式来匹配带点的数字,例如:
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(字符串值)将有效负载转换为数字。您需要检查有效负载类型,如果它不是数字,您需要转换它。
如果您想了解有关示例中使用的正则表达式的更多信息,可以在此处测试:https://regexr.com/