2011-02-07 126 views
36

我正在使用正则表达式来编写一个文本框的输入验证器,我只需要字母字符。我想知道[A-z][a-zA-Z]是否相当,或者如果在性能方面有差异。正则表达式[A-Z]和[a-zA-Z]之间的区别

我一直在阅读我的搜索[a-zA-Z],没有提及[A-z]。我正在使用java的String.matches(regex)

回答

53

[A-z]将在范围匹配的ASCII字符从Az,而[a-zA-Z]将在范围中的范围匹配的ASCII字符从AZaz。乍一看,这看起来可能是等价的 - 但是,如果您查看ASCII字符的this table,则会看到A-z包含其他几个字符。具体来说,它们是[,\,],^,_和```(你显然不想要)。

+6

我想我真的不知道,如果有Z-之间的字符。 – Eric 2011-02-07 16:00:17

8

看看ASCII table。你会看到Za之间有一些字符,所以你会比你更喜欢的匹配。

9

az匹配'a'到'z'AZ匹配'A'到'Z'Az匹配所有这些以及'Z'和'a'之间的字符,它们是[] ^/_`

参见http://www.asciitable.com/

6

方括号创建一个字符类和连字符是用于将提供的两个字符之间的每个字符的简写。即[A-F]可以写成[ABCDEF]

字符类[A-z]将匹配这些字符之间的每个字符,这些字符在ASCII中包含一些其他字符,如'[',''和']'。

指定两种情况的替代方法是使用/i修饰符将正则表达式设置为不区分大小写。

3

看一看的ASCII chart(其中Java的字符是基于):有相当位于Z之间的几个标点字符和,即这些:

[\]^ _` 
6

当你看一看的ASCII表,你会看到以下内容:

A = 65 
Z = 90 
a = 97 
z = 122 

所以,[A-z]将从65每字符匹配122这包括这些字符(91 -> 97)以及:

[\]^_` 

这意味着[A-Za-z]只会匹配的字母,而不会受人注目的字符

相关问题