如何让 yup 数字接受可为空的值?

man*_*nzk 11 javascript yup

我有以下是检查:

nrOfApples: yup.number().min(0).max(999),
Run Code Online (Sandbox Code Playgroud)

现在,如果我将该字段留空,它将验证为 false。有没有办法让 yup.number() 接受空值?我试过了:

yup.number().nullable()
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。关于如何让这种事情发生的任何想法?

xdu*_*ine 17

你必须传递true给 nullable -

nrOfApples: yup.number().min(0).max(999).nullable(true);

来自:https : //github.com/jquense/yup/issues/500

工作示例:https : //runkit.com/xdumaine/5f2816c75a0ba5001aa312b2

请注意,如果您添加required().nullable(true)required覆盖了nullable与空不会验证。

更新:

您可以使用 atransformNaN值转换为null. 我用这个更新了runkit:

const contactSchema = yup.object({
  name: yup.string()
    .required(),
  nrOfApples: yup
    .number()
    .min(0)
    .max(999)
    .nullable(true)
    // checking self-equality works for NaN, transforming it to null
    .transform((_, val) => val === val ? val : null) 
})
Run Code Online (Sandbox Code Playgroud)

  • 建议的解决方案对我来说不起作用,但幸运的是提供的 runkit 链接包含了更改。我建议进行编辑,但以防万一将转换函数调用交换为以下 ```.transform((_, val) => val ? Number(val) : null)``` (4认同)
  • 您好@xdumaine,感谢您的回复。但是,当字段保留为空时,它返回的值是 NaN 而不是 null,因此 .nullable(true) 在这种情况下不起作用。 (3认同)