Hapi / Joi验证号码失败

问题描述 投票:0回答:1

我试图验证数值,包括整数和浮点值。以下是我的实现。

星期四架构。

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

node.js validation schema joi hapi
1个回答
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(字符串值)将有效负载转换为数字。您需要检查有效负载类型,如果它不是数字,您需要转换它。

如果您想了解有关示例中使用的正则表达式的更多信息,可以在此处测试:https://regexr.com/

© www.soinside.com 2019 - 2024. All rights reserved.