Regex未按预期工作

Regex not working as expected

本文关键字:工作 Regex      更新时间:2023-09-26

这个正则表达式出了什么问题?

/^[a-zA-Z'd's&#-'('"]{1,7}$/; 

当我输入以下有效输入时,它失败了:

a&'-#"2

还要检查输入中是否有2个连续空格。

短划线需要转义('-)或放在字符类的末尾,否则它将表示一个范围(如A-Z),而不是文字短划线:

/^[A-Z'd's&#('"-]{1,7}$/i

将是一个更好的正则表达式。

N。B: [#-'(]将匹配#$%&'(

要解决不允许两个连续空格的附加要求,请使用前瞻断言:

/^(?!.*'s{2})[A-Z'd's&#('"-]{1,7}$/i

(?!.*'s{2})的意思是"断言(从当前位置)不可能匹配后面跟着两个空白字符的任何字符串"。需要注意的是:点与换行符不匹配。

-(连字符)在字符类中具有特殊含义,用于指定范围。你是想逃避吗

/^[a-zA-Z'd's&#'-'('"]{1,7}$/;

此RegExp与您的输入相匹配。

在角色类的中间有一个未标注的-。这意味着您实际上正在搜索#((包括#$%&'()之间的所有字符。要么将其移动到末尾,要么用反斜杠对其进行转义。您的正则表达式应为:

/^[a-zA-Z'd's&#'('"-]{1,7}$/

/^[a-zA-Z'd's&#'-'('"]{1,7}$/

删除;在末端和

^[a-zA-Z'd's'&'#'-'('''"]+$

您的输入与正则表达式不匹配。这里的问题是正则表达式中的连字符。如果您将其从"#"字符后的位置移动到正则表达式的开头,如下所示:

/^[-a-zA-Z'd's&#'('"]{1,7}$/;

一切都很好。

您可以始终使用Rubular来检查正则表达式。我经常使用它(并非双关语)。