我有以下正则表达式:
/[0-9#%@_$&!?^\/|*<>]+/i
不应该接受信件。当首次没有输入字母时,它会接受字母。
例如为: 如果我输入“123e”,它会找到一个匹配(但不应该因为有一个字母)
我的正则表达式有什么问题?
由于
答案 0 :(得分:2)
使用开始和结束锚...
/^[\d#%@_$&!?^/|*<>]+\z/i
^
表示字符串的开头,\z
表示字符串的结尾。字符串末尾常用的$
将允许尾随\n
。这并不总是合适的。
答案 1 :(得分:2)
您的正则表达式会检查您指定的列表字符是否有一个或多个 - 这对123e
是否正确。
它不会检查字符串是否仅包含 。
您可能想要编辑正则表达式,所以它看起来像这样:
/^[0-9#%@_$&!?^/|*<>]+$/i
我添加了以下两个anchors:
^
表示“字符串/行的开头”$
表示“字符串/行的结尾”这意味着正则表达式将检查您的字符串是否以您的某个字符开头,以其中一个字符结尾,并包含这些字符。
答案 2 :(得分:2)
如果您希望整个字符串只包含您在正则表达式中指定的字符,则需要将其锚定:
/^[0-9#%@_$&!?^\/|*<>]+$/i
否则,它会在字符串中的任何位置查找指定的字符类:只要其中至少有一个,正则表达式匹配。
答案 3 :(得分:0)
使用^
启动正则表达式,并以$
结束。这将使其独占。
^
代表该行的开头。
$
代表该行的结尾。
答案 4 :(得分:0)
尝试简单地否定代表所有字母的字符类:
/[^a-z^A-Z]+/