使用Yup schema搭配正则校验持续报字段错误该如何解决?
问题根源
你的正则表达式定义存在两处语法错误,导致匹配规则和预期完全不符:
- 使用
RegExp构造函数传入字符串参数时,不需要额外添加正则字面量专用的前后分隔符/,你当前的写法会把/也纳入匹配规则,要求输入内容必须以/开头并结尾,自然所有正常姓名输入都无法通过校验。 - 字符串中的反斜杠
\本身是转义字符,你写的\s在字符串解析后会变成普通字符s,正则实际匹配的是字母s而非空白字符。
正确写法
推荐优先使用正则字面量写法,避免转义踩坑:
const letterRegex = /^[a-zA-Z\s]*$/; const pg_BinnenCoLoondienst: yup.SchemaOf<RowBinnenCoLoonDienstData> = yup .object() .shape({ REV_PE_BCL_Naam: yup.string().required("Name is required").matches(letterRegex, "Name can only contain letters & spaces"),
如果一定要用RegExp构造函数写法,需要删除前后的/,同时把\s转义为\\s:
const letterRegex = new RegExp("^[a-zA-Z\\s]*$");
额外小提示:你原来的错误提示里单词
spacces多写了一个c,修正后更规范。
修改后即可正常匹配仅包含英文字母和空格的姓名字段。
内容的提问来源于stack exchange,提问作者el shorty
相关产品推荐
相关产品推荐

