Dnes jsem objevil String
metoda. Pokud máte co do činění s obsahem vytvářeným uživateli, pomůže vám to se spolehlivějším porovnáváním řetězců.
Dovolte mi ukázat vám rychlý příklad:
// pick a random word with a German Umlaut
const word = 'über'; // displayed as 'über'
console.log(word.length); // 4
const alikeWord = 'u\u0308ber'; // displayed as 'über'
console.log(alikeWord.length); // 5
console.log(word === alikeWord); // false
Jak vidíte, řetězce, které vypadají identicky, se mohou skládat z různých kódových bodů a jednotek. alikeWord
používá kombinovanou diakritickou značku ke generování německé přehlásky ü
– konkrétně používá KOMBINOVACÍ DIAERESI.
Ale tady je háček:přehláska ü
má také svůj vlastní kódový bod Unicode. Zde máme dva způsoby, jak zobrazit stejný glyf, takže porovnání řetězců je složité.
K vyřešení tohoto problému můžete použít normalize
k normalizaci řetězců.
const word = 'über'; // displayed as 'über'
console.log(word.length); // 4
const alikeWord = 'u\u0308ber'.normalize(); // displayed as 'über'
console.log(alikeWord.length); // 4
console.log(word === alikeWord); // true