我正在使用此正则表达式来验证文本:

    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直到字符串的结尾。

09-18 22:58