是的,在 matches 函数中使用 not(!) 时验证不起作用

Ali*_*aie 6 javascript reactjs next.js yup formik

我有一个使用 React 和 next js 的项目。我使用 formik 来处理我的表单,是的,用于验证我有一个输入,我想对其执行一些验证。

  1. 此字段必须为必填字段,因此如果用户不输入任何信息,我将显示此消息 => 必填
  2. 该字段不应包含任何数字,否则我显示此消息 => Wronggggg
  3. 此字段必须仅包含波斯语字符,否则我显示此消息 => 仅波斯语字符

这是我的架构

 Yup.string()
            .required("Requiredddd")
            .matches(!/\d/, 'Wrongggg'),
            .matches(/^[\u0600-\u06FF\s]+$/, 'Only persian chars')
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,条件号 2 总是被认为是错误的。我认为 (!/\d/) 是错误的,但我不知道如何使用否定匹配函数

lis*_*tdm 8

根据yup,您可以使用.matches以下形状: string.matches(regex: Regex, message?: string | function): Schema。如果您想验证字符串不包含数字,则不应使用 ,而(!/\d/)应使用/\D+$/

 Yup.string()
            .required("Requiredddd")
            .matches(/\D+$/, 'Wrongggg')
            .matches(/^[\u0600-\u06FF\s]+$/, 'Only persian chars')
Run Code Online (Sandbox Code Playgroud)

请参阅工作示例


小智 6

您可以使用 Yup 中的函数来完成此test()操作,如下所示:

.test('name Your Test here', 'your validation message', (value) => !yourRegex.test(value))
Run Code Online (Sandbox Code Playgroud)

我相信 Yup 应该提供相反的功能,.match()因为您并不总是想匹配,有时您想根据正则表达式测试您的值。