2011-02-07 10 views
36

Estoy usando una expresión regular para programar un validador de entrada para un cuadro de texto donde solo quiero caracteres alfabéticos. Me preguntaba si [A-z] y [a-zA-Z] eran equivalentes o si había diferencias en el rendimiento.Diferencia entre regex [A-z] y [a-zA-Z]

Sigo leyendo [a-zA-Z] en mis búsquedas y sin mención de [A-z].

Estoy usando Java String.matches(regex).

Respuesta

53

[A-z] coincidirá con caracteres ASCII en el rango de A a z, mientras [a-zA-Z] coincidirá con caracteres ASCII en el rango de A a Zy en el rango de a a z. A primera vista, esto puede parecer equivalente; sin embargo, si nos fijamos en this table de caracteres ASCII, verá que A-z incluye varios otros caracteres. Específicamente, son [, \, ], ^, _ y `` `(que claramente no desea).

+6

Supongo que realmente no estaba seguro de si había caracteres entre Z-a. – Eric

+1

@Eric https://secure.wikimedia.org/wikipedia/en/wiki/Ascii Creo que encontrarás '[\\]^- \' 'entre' Z' y 'a' – KitsuneYMG

8

Eche un vistazo a ASCII table. Verá que hay algunos caracteres entre Z y a, por lo que coincidirá con más de lo que deseaba.

9

El az coincide con 'a' a 'z' AZ coincide con 'A' a 'Z' Az coincide con todos estos y los caracteres entre 'Z' y 'a' que son [] ^/_ `

Consulte http://www.asciitable.com/

6

los corchetes crean una clase de personaje y el guión es una forma abreviada de la adición de todos los personajes entre los dos personajes proporcionados. es decir, [A-F] puede escribirse [ABCDEF].

La clase de caracteres [A-z] coincidirá con cada carácter entre esos caracteres, que en ASCII incluye algunos otros caracteres como '[', '\' y ']'.

Una alternativa para especificar ambos casos sería establecer la expresión regular para que no distinga entre mayúsculas y minúsculas, utilizando el modificador /i.

3

Tome un vistazo a la ASCII chart (que caracteres de Java son basado en): hay unos pocos caracteres de puntuación situados entre Z y A, a saber, los siguientes:

[\]^ _` 
6

Al echar un vistazo a la ASCII mesa, verá el siguiente:

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

así, [A-z] coincidirá con cada carbón de 65 a 122. Esto incluye estos caracteres (91 -> 97), así:

[\]^_` 

Esto significa [A-Za-z] sólo coincidirá con el alfabeto, sin los caracteres notado