我试图创建一个正则表达式,只允许大小写字母以及空格、'-'、','、'.'、'('和')'这些字符。这是我目前的进展,但出于某些原因,它仍然允许我输入数字。
^[a-zA-Z -,.()]*$
非常感谢任何帮助!谢谢。
我试图创建一个正则表达式,只允许大小写字母以及空格、'-'、','、'.'、'('和')'这些字符。这是我目前的进展,但出于某些原因,它仍然允许我输入数字。
^[a-zA-Z -,.()]*$
非常感谢任何帮助!谢谢。
-
在字符类中是特殊的。它用于像您使用 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
,已经被包含在范围内,所以 -
再次被视为字面量。
在所有提到的方法中,转义方法是推荐的,因为它使您的代码更易于阅读和理解。任何看到 \
的人都会认为这是一个意图进行转义的符号。如果将 -
放在开头(结尾),如果您稍后在字符类中添加一个未转义 -
的字符,则会出现问题,从而形成范围。 嗯,问题在于-,
被解释为一个范围,就像a-z
一样,允许所有从空格到逗号的字符。转义它,至少可以修复一些错误。
^[a-zA-Z \-,.()]*$
严格来说,你可能也应该转义.
和()
,因为它们在正则表达式中具有特殊含义。在我测试的Javascript正则表达式引擎中,在[]
上下文中它们似乎会被字面解释,但最好还是显式地转义。
^[a-zA-Z \-,\.\(\)]*$
0-9
数字,所以您实际使用这个正则表达式的代码可能存在问题。.
、(
和)
。在字符类中,只有]
、\
以及-
和^
(取决于位置)具有特殊含义。 - Gumbo在 [a-zA-Z -,.()]
中, -,
描述了从
(0x20) 到 ,
(0x2C) 的范围。这与 [ !"#$%'()*+,]
等效。您应该转义 -
或将其放在其他地方,以免被解释为范围指示符。
但是这不是此问题的原因,因为数字是从 0x30 到 0x39。
我用JavaScript试过了,它很好用。不过其他人说的也是对的。如果使用JavaScript,请检查一切是否正常,否则检查将根本不会发生。