我正在使用正则表达式为文本框编写输入验证器,我只想要字母字符。我想知道[A-z]
和[a-zA-Z]
是否相同,或者是否存在性能差异。
我继续在我的搜索中阅读[a-zA-Z]
,而没有提及[A-z]
。
我正在使用java的String.matches(regex)
。
答案 0 :(得分:77)
[A-z]
将匹配A
到z
范围内的ASCII字符,而[a-zA-Z]
将匹配A
到{{范围内的ASCII字符1}} 和,范围从Z
到a
。乍一看,这可能看起来相同 - 但是,如果您查看this table个ASCII字符,您会看到z
包含其他几个字符。具体来说,它们是A-z
,[
,\
,]
,^
和_
(您显然不需要)。
答案 1 :(得分:12)
az匹配'a'到'z'AZ匹配'A'到'Z'Az匹配所有这些以及'Z'和'a'之间的字符是[] ^ / _` << / p>
答案 2 :(得分:9)
看看ASCII table。您会发现Z
和a
之间存在一些字符,因此您的匹配将超出您的预期。
答案 3 :(得分:8)
当您查看ASCII表时,您将看到以下内容:
A = 65
Z = 90
a = 97
z = 122
因此,[A-z]
将匹配65到122之间的每个字符。这包括这些字符(91 -> 97
):
[\]^_`
这意味着[A-Za-z]
将只匹配字母,而没有注意到的字符
答案 4 :(得分:7)
方括号创建一个字符类,连字符是在两个提供的字符之间添加每个字符的简写。即[A-F]
可以写成[ABCDEF]
。
字符类[A-z]
将匹配这些字符之间的每个字符,ASCII中包含一些其他字符,例如'[','\'和']'。
指定这两种情况的另一种方法是使用/i
修饰符将正则表达式设置为不区分大小写。
答案 5 :(得分:4)
看一下ASCII chart(Java字符所依据的):Z和a之间有很多标点符号,即:
[\]^ _`