javascript 在匹配函数中使用not(!)时,验证不起作用

0s7z1bwu  于 2023-01-07  发布在  Java
关注(0)|答案(2)|浏览(156)

我有一个项目与React和下一个js。我用formik处理我的表单和是的验证,我有一个输入,我想执行一些验证。
1.此字段必须是必填字段,因此如果用户不输入任何信息,我将显示此消息=〉Required
1.此字段不应包含任何数字,否则显示此消息=〉Wrongggg
1.此字段必须仅包含波斯语字符,否则我显示此消息=〉仅波斯语字符
这是我的模式

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

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

mspsb9vt

mspsb9vt1#

根据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')

参见working example

nc1teljy

nc1teljy2#

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

.test('name Your Test here', 'your validation message', (value) => !yourRegex.test(value))

我认为Yup应该为.match()提供一个相反的函数,因为你不总是想匹配,有时你想用正则表达式测试你的值。

相关问题