是的验证是字符串或字符串数​​组

dav*_*ler 15 javascript yup formik

我想验证一个字段是字符串还是字符串数组

这是一个最小的失败示例,它碰巧使用了 formik 但实际上我正在使用 yup 进行服务器端验证。

  {
    email: yup
      .mixed()
      .oneOf([yup.array().of(yup.string()), yup.string()])
      .nullable()
  }
Run Code Online (Sandbox Code Playgroud)

Tym*_*mek 13

{
  email: yup.mixed()
    .when('isArray', {
      is: Array.isArray,
      then: yup.array().of(yup.string()),
      otherwise: yup.string(),
    })
}
Run Code Online (Sandbox Code Playgroud)

但是一组复选框可以生成一个数组,而文本输入则不会。您是否正在寻找一种解决方案来验证按分隔符划分的电子邮件?


Aja*_*mar 10

当表单包含多选字段并保持此字段为必填字段并且至少需要选择一个选项时,此 YUP 简单验证适用于我的情况。

 selectOptions: array()
         .min(1, "You can't leave this blank.")
         .required("You can't leave this blank.")
         .nullable()
Run Code Online (Sandbox Code Playgroud)

  • 但这并不能真正回答问题。这只是一个字符串数组。OP想要一个字符串(不在数组中)或一个字符串数组。 (2认同)

dav*_*ler 9

oneOf仅适用于文字值。Lazy 允许您动态提供一个模式,如下所示

{ 
  email: yup.lazy(val => (Array.isArray(val) ? yup.array().of(yup.string()) : yup.string()))
}
Run Code Online (Sandbox Code Playgroud)