Yup条件最大长度验证一个字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yup条件最大长度验证一个字段相关的知识,希望对你有一定的参考价值。

我一直在努力使用Yup为一个文本字段编写验证器。如果用户输入的字符串包含“-”,则该字段的最大长度应为10。如果没有“-”,则最大长度应为9。

现在,代码看起来像这样:

export default Yup.object().shape(
  description: Yup.string()
    .required('Description is required')
    .matches(
      /^[a-zA-Z0-9-]*$/,
      'Description can only contain letters, numbers and dashes'
    )
    .max(10, 'Description has a max length of 10 characters'),
  invoiceDate: Yup.date()
    .nullable()
    .required('Invoice Date is required'),
);

条件验证应应用于描述字段。

答案

您应该在“ yup”中使用“ when”:

description: Yup.string()
  .when("any", 
      is: val => /-/.test(Yup.ref("description")),
      then: Yup.string()
        .required('Description is required')
        .matches(/^[a-zA-Z0-9-]*$/,
           'Description can only contain letters, numbers and dashes'
        )
        .max(10, 'Description has a max length of 10 characters')

      otherwise:  Yup.string()
        .required('Description is required')
        .matches(/^[a-zA-Z0-9-]*$/,
          'Description can only contain letters, numbers and dashes'
        )
        .max(9, 'Description has a max length of 9 characters')
    )

我希望它对您有用。

以上是关于Yup条件最大长度验证一个字段的主要内容,如果未能解决你的问题,请参考以下文章

我们应该验证字符串字段的最大长度吗?

如何使用Yup根据条件设置验证架构?格式

textField 最大长度和邮政编码验证

angular表单怎么验证输入最大小长度

Rails:验证字符串的最小和最大长度,但允许它为空

extjs3 网格单元最大长度输入验证