Ce face String.prototype.normalize
În Unicode, aceeași literă poate fi scrisă în două feluri: ca un singur caracter („ă”) sau ca literă de bază urmată de un semn („a” + „̆”). Pe ecran arată la fel, dar la comparație sunt texte diferite.
normalize("NFC") (implicit) le aduce pe toate la forma compusă, iar normalize("NFD") le desparte în literă și semn. Forma NFD, urmată de ștergerea semnelor cu replace(/\p{M}/gu, ""), este metoda obișnuită de a elimina diacriticele.
Parametri
| Parametru | Descriere |
|---|---|
forma |
Opțional. "NFC" (implicit), "NFD", "NFKC" sau "NFKD". |
Ce returnează
Un șir nou, normalizat.
Exemple
Exemplul 1: Același cuvânt, scris în două feluri
const compus = "mă";
const descompus = "ma\u0306";
console.log(compus, descompus);
console.log(compus === descompus);
console.log(compus.length, descompus.length);
console.log(compus === descompus.normalize("NFC"));
Rezultat
mă mă
false
2 3
true
Exemplul 2: Eliminarea diacriticelor (de exemplu pentru un slug)
function faraDiacritice(text) {
return text.normalize("NFD").replace(/\p{M}/gu, "");
}
console.log(faraDiacritice("Ștefan cel Mare și Sfânt, Țara Românească"));
Rezultat
Stefan cel Mare si Sfant, Tara Romaneasca
Greșeli frecvente
- Compari texte venite din surse diferite (formular, fișier, bază de date) fără să le normalizezi și cuvinte identice par diferite.
Comenzi înrudite
replace / replaceAll: Înlocuiește o bucată de text cu alta. replace schimbă prima apariție, replaceAll pe toate.String.prototype.localeCompare: Compară două texte după regulile alfabetului unei limbi; util la sortarea cu diacritice.String.prototype.isWellFormed / toWellFormed: Verifică dacă un text are perechi surogat rupte și le înlocuiește cu caracterul �.