Cada vez que se escribe [A-Z]
o [a-z]
, se compromete a procesar nada más que datos ASCII de 7 bits. Si eso está realmente bien, está bien. Pero si no lo es, las propiedades Unicode existen para ayudar con esto.
Hay tres casos en Unicode, no dos. Además, también tienes letras no encadenadas. Letras en general son especificados por la propiedad \pL
, y cada una de ellas también pertenece a exactamente una de las cinco subcategorías:
- letras mayúsculas, especificados con
\p{Lu}
; por ejemplo: AÇDZÞΣSSὩΙST
- letras del título, especificado con
\p{Lt}
; por ejemplo: LjDzSsᾩSt
(en realidad Ss
y St
son una mayúsculas y luego una letra minúscula, pero ellos son lo que se obtiene si se le pregunta por el TitleCase de ß
y ſt
, respectivamente)
- letras minúsculas, especificado con
\p{Ll}
; por ejemplo: aαçdzςσþßᾡſt
- letras modificadoras, especificadas con
\p{Lm}
; por ejemplo: ʰʲᴴᴭʺˈˠᵠꜞ
- otras letras, especificadas con
\p{Lo}
; por ejemplo: ƻאᎯᚦ京
Usted puede toma el complemento de cualquiera de ellos, pero tenga cuidado, porque algo así como \P{Lu}
hace no significa una letra que no está en mayúsculas. Significa cualquier personaje que no sea una letra mayúscula.
Para la letra mayúscula o de título, use [\p{Lu}\p{Lt}]
.Así que se podría utilizar para su patrón:
^([\p{Lu}\p{Lt}]\p{Ll}+)+$
Si aquellos que no te refieres a limitar las letras que siguen al primero en las letras de la carcasa solo, entonces es posible que prefiera:
^([\p{Lu}\p{Lt}][\p{Ll}\p{Lm}\p{Lo}]+)+$
Si' Al tratar de hacer coincidir los denominados identificadores "CamelCase", las reglas reales dependen del lenguaje de programación, pero generalmente incluyen el carácter de subrayado y los números decimales (\p{Nd}
), y pueden incluir un signo de dólar literal. Si esto es así, es posible que desee agregar algunos de estos a una u otra de las dos clases de caracteres anteriores. Por ejemplo, puede que desee añadir subrayado a ambos, pero sólo números al segundo, dejándole con:
^([_\p{Lu}\p{Lt}][_\p{Nd}\p{Ll}\p{Lm}\p{Lo}]+)+$
Si, sin embargo, se trata de ciertas palabras de varias RFC y los estándares ISO, éstos a menudo se especifican como que contiene ASCII solamente. Si es así, puede salir adelante con la idea literal de [A-Z]
. Simplemente no es amable imponer esa restricción si realmente no existe.
wat? ! . etc significa? – kiki
es un lookahead negativo - ver mi enlace publicado para una explicación detallada. Básicamente dice que si la expresión regular entre el lookahead negativo coincide, la expresión completa no se corresponde. por lo que puede, por ejemplo, decir:^[0-9] $ (haga coincidir un número del 0 al 9. y puede decir (?!^3 $)^[0-9] $ (haga coincidir un número del 0 al 9, excepto 3). –