我想确保用户不要填写用户名(模式是大写或小写的u,后跟7-10位数字:U0000000
)
在以下示例中,正则表达式本身起作用。但是,与.matches()
方法结合使用时,它不会验证该字段。
const schema = Yup.object()
.shape({
myField: Yup.string()
.matches(/.*\d/, 'Should contain a digit') // <- this works
.matches(/(?!.*[uU]\d{7,10})/, 'Should not contain a user ID') // <- this does not
});
最佳答案
事实证明,只有当您提供的正则表达式返回正数时,匹配项才会验证无效错误。
如果要验证否定的“匹配”,可以使用.test()
方法。
在文档中字符串下未提及,但在混合 (source)下未提及:
mixed.test(name: string, message: string | function, test: function): Schema
因此,在我的示例中,我最终得到了:
const containsDeviceId = (string) => /d\d{7,10}/.test(string);
const schema = Yup.object()
.shape({
myField: Yup.string()
.matches(/.*\d/, 'Should contain a digit')
.test(
'Should not contain a user ID',
'Should not contain a user ID',
(value) => !containsDeviceId(value)
),
希望这对某人有帮助。