String.prototype.normalize în JavaScript

Șiruri de caractere ES2015 (ES6)

Aduce textul la o formă Unicode standard; util pentru comparații și eliminarea diacriticelor.

Sintaxă
sir.normalize(forma)

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