我正在使用此正则表达式来验证文本:
const regex = /^[\u00C0-\u017Fa-zA-Z'][\u00C0-\u017Fa-zA-Z-' ]+[\u00C0-\u017Fa-zA-Z']?$/
return text.length > 0 && !reg.test(text);
它允许文本字符包括来自不同语言的特殊字符。
但是我在这个验证中允许撇号“'”有问题。
有人可以帮我吗?
最佳答案
由于您的输入可能包含大括号的单引号,因此您需要将其添加到可能需要与之匹配的所有字符类中:
const reg = /^[\u00C0-\u017Fa-zA-Z'’‘’][\u00C0-\u017Fa-zA-Z’‘’' -]+[\u00C0-\u017Fa-zA-Z'’‘’]?$/
注意,我还将
-
放在第二个字符类的末尾,以便始终可以将其解析为文字连字符。如果您输入的字符串可以在起始/结尾处没有连字符,并且字符串长度可以为1个字符
const reg = /^[\u00C0-\u017Fa-zA-Z'’‘’](?:[\u00C0-\u017Fa-zA-Z’‘’' -]*[\u00C0-\u017Fa-zA-Z'’‘’])?$/
也就是说,您的正则表达式具有类似
^a[a-]+a?$
的方案,但我建议使用^a(?:[a-]*a)?$
,即匹配a
然后是0或更多a
和-
的可选序列,后跟a
直到字符串的结尾。