正则表达式只允许字母和一些字符

new*_*gex 8 regex

我试图创建一个只允许字母大写或小写的正则表达式,以及空格字符' - ',',''.','('和')'.这是我到目前为止,但由于某种原因它仍然让我输入数字

^[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已经涉及范围,所以-再次对其进行字面处理.

在所有提到的方法中,建议使用转义方法,因为它使您的代码更易于阅读和理解.任何看到的人\都会期望逃跑.-如果稍后在字符类之前(之后)添加字符而不转义-因此形成范围,则放置在开头(结束)将产生问题.


Mat*_*chu 5

嗯,有一个问题是-,被解释为一个范围,例如a-z,允许从空格到逗号的所有字符。逃避这个问题,至少应该修复一些错误。

^[a-zA-Z \-,.()]*$
Run Code Online (Sandbox Code Playgroud)

严格来说,您可能也应该转义.and (),因为它们在正则表达式中具有特殊含义。无论如何,Javascript 正则表达式引擎(我正在测试的地方)似乎在[]上下文中逐字解释它们,但明确地总是要好得多。

^[a-zA-Z \-,\.\(\)]*$
Run Code Online (Sandbox Code Playgroud)

但是,这仍然不应该允许数字,因此使用0-9此正则表达式的实际代码可能也存在问题。