Chaque fois que l'on écrit [A-Z]
ou [a-z]
, on s'engage à ne traiter que des données ASCII 7 bits. Si c'est vraiment bien, alors ça va. Mais si ce n'est pas le cas, les propriétés Unicode existent pour vous aider.
Il existe trois cas dans Unicode, pas deux. En outre, vous avez également des lettres non assouplies. Les lettres en général sont spécifiées par la propriété \pL
, et chacun d'entre eux appartient aussi exactement l'un des cinq sous-catégories:
- lettres majuscules, spécifiées avec
\p{Lu}
; par exemple: AÇDZÞΣSSὩΙST
- lettres en titrase, spécifiées avec
\p{Lt}
; par exemple: LjDzSsᾩSt
(en fait Ss
et St
sont un palier supérieur, puis une lettre minuscule, mais ils sont ce que vous obtenez si vous demandez l'titlecase de ß
et ſt
, respectivement)
- lettres minuscules, spécifiée par
\p{Ll}
; par exemple: aαçdzςσþßᾡſt
- les lettres de modificateur, spécifiées avec
\p{Lm}
; par exemple: ʰʲᴴᴭʺˈˠᵠꜞ
- autres lettres, spécifiées avec
\p{Lo}
; par exemple: ƻאᎯᚦ京
Vous pouvez prendre le complément de toutes ces choses, mais faites attention, parce que quelque chose comme \P{Lu}
ne pas signifie une lettre qui ne sont pas en majuscules. Cela signifie tout caractère qui n'est pas une lettre majuscule. Pour les lettres majuscules ou en titrase, utilisez [\p{Lu}\p{Lt}]
.Donc, vous pouvez utiliser pour votre modèle:
^([\p{Lu}\p{Lt}]\p{Ll}+)+$
Si ceux que vous ne voulez pas limiter les lettres qui suivent la première aux lettres de boîtier seul, alors vous pourriez préférer:
^([\p{Lu}\p{Lt}][\p{Ll}\p{Lm}\p{Lo}]+)+$
Si vous En essayant de faire correspondre les identifiants dits "CamelCase", les règles réelles dépendent du langage de programmation, mais incluent généralement le caractère de soulignement et les nombres décimaux (\p{Nd}
), et peuvent inclure un signe dollar littéral. Si tel est le cas, vous pouvez ajouter certains d'entre eux à l'une ou l'autre des deux classes de caractères ci-dessus. Par exemple, vous pouvez ajouter underscore à la fois, mais les chiffres que dans la seconde, vous laissant avec:
^([_\p{Lu}\p{Lt}][_\p{Nd}\p{Ll}\p{Lm}\p{Lo}]+)+$
Si, cependant, vous avez affaire à certains mots de divers RFCs et les normes ISO, celles-ci sont souvent spécifiées comme contenant uniquement ASCII. Si oui, vous pouvez vous en tirer avec l'idée littérale [A-Z]
. Ce n'est pas gentil d'imposer cette restriction si elle n'existe pas.
wat fait? ! . etc représentent? – kiki
c'est un lookahead négatif - voir mon lien posté pour une explication en profondeur. En gros, il est dit que si la regex entre les lookahead négatifs est appariée, l'expression entière ne correspond pas. donc vous pouvez par exemple dire:^[0-9] $ (faire correspondre un nombre de 0 à 9. et vous pouvez dire (?!^3 $)^[0-9] $ (faire correspondre un nombre de 0 à 9 sauf 3). –