Risposta tecnica diretta
Le classi di caratteri regex standard (\w, \d, [a-z]) corrispondono solo ai caratteri ASCII e falliscono con il testo internazionale. I motori regex moderni supportano la modalità Unicode (il flag /u o /v in ECMAScript) e gli escape di proprietà Unicode (\p{...}) per far corrispondere i caratteri in base alle loro proprietà Unicode ufficiali.
Escape di proprietà Unicode essenziali
Gli escape di proprietà Unicode più comunemente richiesti, supportati dai motori moderni.
\p{L} or \p{Letter}
Corrispondenze: Qualsiasi lettera in qualsiasi lingua (latino, greco, cirillico, arabo, ebraico, CJK, ecc.)
Esempio: a, é, Ω, Ж, ش, א, 漢
\p{N} or \p{Number}
Corrispondenze: Qualsiasi carattere numerico o cifra (inclusi numeri romani, pedici e apici)
Esempio: 5, ², Ⅳ, ٥
\p{P} or \p{Punctuation}
Corrispondenze: Qualsiasi carattere di punteggiatura
Esempio: !, ?, —, «, », ¿
\p{Z} or \p{Separator}
Corrispondenze: Qualsiasi spazio o separatore invisibile
Esempio: Spazio, spazio unificatore, spazio em
\p{Extended_Pictographic}
Corrispondenze: Tutte le emoji e i simboli pittografici
Esempio: 😀, 🔥, 🚀, 🎉
\p{Script=Greek}
Corrispondenze: Caratteri specifici della scrittura greca
Esempio: α, β, γ, Δ
Corrispondenza di lettere internazionali ed emoji con gli escape di proprietà Unicode
// 1. Traditional \w fails on accented letters and non-Latin alphabets
const asciiRegex = /^\w+$/;
console.log(asciiRegex.test('José')); // false!
console.log(asciiRegex.test('Müller')); // false!
// 2. Unicode property escape \p{L} matches any letter in Unicode
const unicodeNameRegex = /^[\p{L}]+$/u;
console.log(unicodeNameRegex.test('José')); // true!
console.log(unicodeNameRegex.test('Müller')); // true!
console.log(unicodeNameRegex.test('Владимир')); // true (Cyrillic)!
console.log(unicodeNameRegex.test('田中')); // true (Kanji)!
// 3. Matching Emojis with \p{Extended_Pictographic}
const emojiRegex = /\p{Extended_Pictographic}/u;
console.log(emojiRegex.test('Hello 🔥!')); // true!
false
false
true
true
true
true
true
Errori comuni vs modelli di produzione
Scopri quali modelli falliscono in produzione e le alternative moderne conformi agli standard.
Far corrispondere le emoji in sicurezza
Validazione di chat, sanificazione dell'input, filtri delle reazioni.const badEmojiRegex = /[\u1F600-\u1F64F]/; // Matches only one block!
const goodEmojiRegex = /\p{Extended_Pictographic}/u;
goodEmojiRegex.test('🔥'); // true
goodEmojiRegex.test('🍣'); // true
Matrice dei casi limite e invarianti
Una matrice di test diversificata che confronta il comportamento dei caratteri tra ASCII, segni combinanti, emoji, bandiere e frammenti surrogati.
| Caso di test | Glifo di input | Unità di codice | Punti di codice | Grafemi | Categoria | Spiegazione tecnica |
|---|---|---|---|---|---|---|
| Nome con accenti | Renée |
—
|
—
|
—
|
Standard | Sia le lettere base sia le lettere accentate corrispondono a \p{L}. |
| Testo cirillico | Привет |
—
|
—
|
—
|
Standard | Le lettere cirilliche corrispondono a \p{L} in modalità Unicode. |
| Ideogrammi CJK | 東京 |
—
|
—
|
—
|
Standard | Corrisponde esplicitamente ai caratteri Kanji/Han. |
Standard e provenienza delle fonti
Tutti gli invarianti tecnici, le API e i comportamenti di questa guida sono verificati rispetto alle specifiche primarie ufficiali.
Unicode Technical Standard #18: Unicode Regular Expressions
Clausola: §1.2 Properties
ECMAScript 2024 Language Specification
Clausola: §22.2 RegExp (Regular Expression) Objects