是的验证是字符串还是字符串数组

时间:2019-07-02 15:36:37

标签: javascript formik yup

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

这里是一个minimal failing example,恰好使用了formik,但实际上我正在使用yup进行服务器端验证。

  {
    email: yup
      .mixed()
      .oneOf([yup.array().of(yup.string()), yup.string()])
      .nullable()
  }

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

David Adler的解决方案对我来说是可行的。

这是基于TS的变体:

  from: Yup.lazy<string | string[]>(from => {
    return Array.isArray(from)
      ? Yup.array()
        .of(PathnameValidator.required())
        .required()
      : PathnameValidator.required();
  }),

答案 2 :(得分:0)

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

 selectOptions: array()
         .min(1, "You can't leave this blank.")
         .required("You can't leave this blank.")
         .nullable()

答案 3 :(得分:-1)

happens-before仅适用于文字值。懒惰允许您动态提供一个架构,如下所示

oneOf