正则表达式没有按预期工作

时间:2012-02-01 16:18:52

标签: javascript regex

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

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

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

a&'-#"2

同时检查输入中的连续2个空格。

5 个答案:

答案 0 :(得分:5)

破折号需要转义(\-)或放置在角色类的末尾,否则它将表示范围(如A-Z中所示),而不是文字破折号:

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

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

<磷>氮。 B:[#-\(]会匹配#$%&'(

为了满足不允许两个连续空格的附加要求,请使用先行断言:

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

(?!.*\s{2})表示“断言无法匹配(从当前位置)任何字符串后跟两个空白字符”。一个警告:点与换行符不匹配。

答案 1 :(得分:1)

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

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

此RegExp符合您的输入。

答案 2 :(得分:1)

你的角色类中间有一个未转义的-。这意味着您实际上正在搜索#(之间的所有字符(#$%,{{1} },&')。将其移动到最后或用反斜杠将其转义。你的正则表达式应该是:

(

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

答案 3 :(得分:0)

删除;最后和

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

答案 4 :(得分:0)

您的输入与正则表达式不匹配。这里的问题是regexp中的连字符。如果你将它从'#'字符后的位置移动到正则表达式的开头,就像这样:

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

一切都很好,花花公子。

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