正则表达式只允许字母和一些字符
我试图创建一个只允许字母大写或小写的正则表达式,以及空格,' - ','','','('和''' 。这是我迄今为止,但由于某种原因,它仍然让我输入数字正则表达式只允许字母和一些字符
^[a-zA-Z -,.()]*$
任何帮助将是伟大的!谢谢。
好吧,有一个问题,-,
被解释为一个范围,如a-z
,允许从空间到逗号的所有字符。逃避并至少应该修复一些错误。
^[a-zA-Z \-,.()]*$
严格地说,你应该也难逃.
和()
,也因为那些在正则表达式的特殊含义。 Javascript正则表达式引擎(我正在测试的)似乎在[]
的上下文中直接解释它们,但总是明确得多。
^[a-zA-Z \-,\.\(\)]*$
然而,这仍然不应该被允许0-9
数字,因此您的实际代码,使用这个正则表达式可能有一些问题,以及。
-
是特殊的字符类。它用于定义一个范围,如您对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
之间的地方,因为这两个周边-
(我们想从字面上对待一个)是z
和A
已经参与范围,在-
人物简直是再处理。
在所有提及的方法中,推荐使用转义方法,因为它使您的代码更易于阅读和理解。任何看到\
的人都会期望逃脱的目的。将-
置于开头(结束)会产生问题,如果您稍后在字符类中之前(之后)添加字符而不逃避-
,则会形成一个范围。
-,
in [a-zA-Z -,.()]
描述从
(0x20)到,
(0x2C)的范围。这相当于[ !"#$%'()*+,]
。您应该跳过-
或将其放置在不被解释为范围指示符的地方。
但这不是这个问题的原因,因为数字是从0x30到0x39。
我试过用JavaScript,它工作正常。其他人都是正确的,但。如果在JavaScript中,检查是否一切正常,否则检查不会发生。
转义为正则表达式标记的字符:。() – 2010-12-22 15:40:38
@ Mathias E:在字符组内部,您不必转义所有正则表达式标记。 – unholysampler 2010-12-22 15:45:14
这真的是你实际使用的正则表达式吗? – Gumbo 2010-12-22 15:46:36