Ogni volta che si scrive [A-Z]
o [a-z]
, uno si impegna a elaborare solo dati ASCII a 7 bit. Se è davvero ok, allora va bene. Ma se non lo è, esistono le proprietà Unicode per aiutare con questo.
Esistono tre casi in Unicode, non due. Inoltre, hai anche lettere non scritte. Lettere in generale sono specificati dalla proprietà \pL
, e ciascuna di queste appartiene anche esattamente una delle cinque categorie:
- lettere maiuscole, indicati con
\p{Lu}
; es .: AÇDZÞΣSSὩΙST
- lettere di maiuscolo, specificate con
\p{Lt}
; ad esempio: LjDzSsᾩSt
(in realtà Ss
e St
sono una superiore e quindi una lettera minuscola, ma sono quello che si ottiene se si chiede per la Titlecase di ß
e ſt
, rispettivamente)
- lettere minuscole, specificato con
\p{Ll}
; es .: aαçdzςσþßᾡſt
- lettere di modificatore, specificate con
\p{Lm}
; es .: ʰʲᴴᴭʺˈˠᵠꜞ
- altre lettere, specificato con
\p{Lo}
; ad esempio: ƻאᎯᚦ京
È possibile prendere il complemento di una di queste, ma attenzione, perché qualcosa di simile \P{Lu}
fa non significa una lettera che non è maiuscolo. Significa qualsiasi carattere che non sia una lettera maiuscola.
Per la lettera che sia in maiuscolo o in titlecase, utilizzare [\p{Lu}\p{Lt}]
.Così si potrebbe utilizzare per il modello:
^([\p{Lu}\p{Lt}]\p{Ll}+)+$
Se coloro che non intendi per limitare le lettere che seguono il primo a soli lettere involucro, allora si potrebbe preferire:
^([\p{Lu}\p{Lt}][\p{Ll}\p{Lm}\p{Lo}]+)+$
Se si' cercando di associare i cosiddetti identificatori "CamelCase", le regole effettive dipendono dal linguaggio di programmazione, ma solitamente includono il carattere di sottolineatura e i numeri decimali (\p{Nd}
) e possono includere un segno di dollaro letterale. Se è così, potresti voler aggiungere alcuni di questi all'una o all'altra delle due classi di caratteri sopra. Ad esempio, si potrebbe desiderare di aggiungere sottolineatura per entrambi, ma le cifre solo al secondo, lasciando con:
^([_\p{Lu}\p{Lt}][_\p{Nd}\p{Ll}\p{Lm}\p{Lo}]+)+$
Se, però, avete a che fare con certe parole da varie RFC e standard ISO, questi sono spesso specificati come contenente solo ASCII. Se è così, puoi cavartela con l'idea letterale [A-Z]
. Non è gentile imporre questa restrizione se non esiste realmente.
wat fa? ! . eccetera? – kiki
è un aspetto negativo: consulta il mio link pubblicato per una spiegazione approfondita. fondamentalmente dice che se la regex tra il lookahead negativo è abbinata, l'intera espressione non viene eguagliata. quindi puoi per esempio dire:^[0-9] $ (confronta un numero da 0 a 9. e puoi dire (?!^3 $)^[0-9] $ (corrisponde a un numero da 0 a 9 tranne 3). –