我试图创建一个只允许字母大写或小写的正则表达式,以及空格字符' - ',',''.','('和')'.这是我到目前为止,但由于某种原因它仍然让我输入数字
^[a-zA-Z -,.()]*$
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒!谢谢.
cod*_*ict 13
-在角色类中很特别.它用于定义您已完成的范围a-z.
要匹配文字,-您需要将其转义或放置它,使其不能作为范围运算符:
^[a-zA-Z \-,.()]*$
^^ escaping \
Run Code Online (Sandbox Code Playgroud)
要么
^[-a-zA-Z ,.()]*$
^ placing it at the beginning.
Run Code Online (Sandbox Code Playgroud)
要么
^[a-zA-Z -,.()-]*$
^ placing it at the end.
Run Code Online (Sandbox Code Playgroud)
而且很有趣
^[a-z-A-Z -,.()]*$
^ placing in the middle of two ranges.
Run Code Online (Sandbox Code Playgroud)
在最后的情况下-,在两个字符之间放置a-z,A-Z因为两个字符围绕着-(我们想要字面处理的字符)已经z并且A已经涉及范围,所以-再次对其进行字面处理.
在所有提到的方法中,建议使用转义方法,因为它使您的代码更易于阅读和理解.任何看到的人\都会期望逃跑.-如果稍后在字符类之前(之后)添加字符而不转义-因此形成范围,则放置在开头(结束)将产生问题.
嗯,有一个问题是-,被解释为一个范围,例如a-z,允许从空格到逗号的所有字符。逃避这个问题,至少应该修复一些错误。
^[a-zA-Z \-,.()]*$
Run Code Online (Sandbox Code Playgroud)
严格来说,您可能也应该转义.and (),因为它们在正则表达式中具有特殊含义。无论如何,Javascript 正则表达式引擎(我正在测试的地方)似乎在[]上下文中逐字解释它们,但明确地总是要好得多。
^[a-zA-Z \-,\.\(\)]*$
Run Code Online (Sandbox Code Playgroud)
但是,这仍然不应该允许数字,因此使用0-9此正则表达式的实际代码可能也存在问题。