正则表达式匹配超过允许的字符

时间:2011-10-24 00:07:54

标签: php regex preg-match

我试图验证给定的字符串是否只包含一组符号(!-?():&,;+)中的字母,数字,空格和字符。以下是我到目前为止的情况:

/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/

现在这种方法有些作用,但它也接受其他字符。例如,包含*#的字符串会生效。我认为表达式开头的^和最后的$意味着它会匹配整个字符串。我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/

- 放置它的地方并不好看!如果你想放置 - 在角色类中,请确保将其置于第一个最后一个,例如

/^[a-zA-Z0-9 !?\(\):&,;\+-]+$/

否则将占用范围!直到 ?无论这个范围怎么样......取决于你的正则表达式机器。

最后,特殊字符在字符类中不是特殊的。所以不需要逃避大多数人:

/^[a-zA-Z0-9 !?():&,;+-]+$/

答案 1 :(得分:2)

您已在角色类中指定了“范围”:

[!-?]

表示!?之间的所有ASCII符号 http://www.regular-expressions.info/charclass.html

您需要使用-反斜杠转义减号\。 (OTOH反斜杠在字符类中+(以及)之前是多余的。)