我试图创建一个只允许字母大写或小写的正则表达式,以及空格字符' - ',',''。','('和')'。这是我到目前为止,但由于某种原因它仍然让我输入数字
^[a-zA-Z -,.()]*$
任何帮助都会很棒!谢谢。
答案 0 :(得分:13)
-
在字符类中很特殊。它用于定义范围,就像您使用a-z
一样。
要匹配文字-
,您需要将其转义或放置它,使其不能用作范围运算符:
^[a-zA-Z \-,.()]*$
^^ escaping \
或
^[-a-zA-Z ,.()]*$
^ placing it at the beginning.
或
^[a-zA-Z -,.()-]*$
^ placing it at the end.
有趣的是
^[a-z-A-Z -,.()]*$
^ placing in the middle of two ranges.
在最后一种情况下,-
位于a-z
和A-Z
之间,因为-
(我们想要字面意思的那个)周围的两个字符都是{ {1}}和z
已经涉及范围,A
会再次被视为处理。
在所有提到的方法中,建议使用转义方法,因为它使您的代码更易于阅读和理解。任何看到-
的人都会期望逃跑。如果您稍后在字符类之前(之后)添加字符而不转义\
从而形成范围,则将-
放在开头(结尾)会产生问题。
答案 1 :(得分:4)
嗯,有一个问题是-,
被解释为范围,例如a-z
,允许从空格到逗号的所有字符。逃避它,至少应修复一些错误。
^[a-zA-Z \-,.()]*$
严格地说,你也应该逃避.
和()
,因为它们在正则表达式中具有特殊含义。无论如何,Javascript正则表达式引擎(我正在测试的地方)似乎在[]
上下文中完全解释它们,但是明白它总是好得多。
^[a-zA-Z \-,\.\(\)]*$
但是,这仍然不应该允许0-9
位数,因此使用这个正则表达式的实际代码也可能存在问题。
答案 2 :(得分:2)
-,
中的[a-zA-Z -,.()]
描述了从
(0x20)到,
(0x2C)的范围。这相当于[ !"#$%'()*+,]
。您应该转义-
或将其置于不被解释为范围指示符的其他位置。
但这不是导致此问题的原因,因为数字是从0x30到0x39。
答案 3 :(得分:0)
我用javascript尝试过,它运行正常。但其他人都是正确的。如果在javascript中,检查一切是否正常,否则检查根本不会发生。