我试图验证给定的字符串是否只包含一组符号(!-?():&,;+
)中的字母,数字,空格和字符。以下是我到目前为止的情况:
/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/
现在这种方法有些作用,但它也接受其他字符。例如,包含*
或#
的字符串会生效。我认为表达式开头的^
和最后的$
意味着它会匹配整个字符串。我做错了什么?
感谢。
答案 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反斜杠在字符类中+
和(
以及)
之前是多余的。)