这个正则表达式有什么问题?
/^[a-zA-Z\d\s&#-\('"]{1,7}$/;
当我输入以下有效输入时,它会失败:
a&'-#"2
同时检查输入中的连续2个空格。
答案 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来检查正则表达式。我经常使用它(没有双关语)。