| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/normalize | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit September 2016 browserbergreifend verfgbar.
Die normalize()-Methode von String-Werten gibt die Unicode-Normalisierungsform dieses Strings zurck.
const name1 = "\u0041\u006d\u00e9\u006c\u0069\u0065";
const name2 = "\u0041\u006d\u0065\u0301\u006c\u0069\u0065";
console.log(`${name1}, ${name2}`);
// Expected output: "Amlie, Amlie"
console.log(name1 === name2);
// Expected output: false
console.log(name1.length === name2.length);
// Expected output: false
const name1NFC = name1.normalize("NFC");
const name2NFC = name2.normalize("NFC");
console.log(`${name1NFC}, ${name2NFC}`);
// Expected output: "Amlie, Amlie"
console.log(name1NFC === name2NFC);
// Expected output: true
console.log(name1NFC.length === name2NFC.length);
// Expected output: true
normalize()
normalize(form)
form OptionalEiner der Werte "NFC", "NFD", "NFKC" oder
"NFKD", der die Unicode-Normalisierungsform angibt. Wenn ausgelassen oder
undefined, wird "NFC" verwendet.
Diese Werte haben folgende Bedeutungen:
Ein String, der die Unicode-Normalisierungsform des gegebenen Strings enthlt.
RangeErrorWird ausgelst, wenn form nicht einer der oben angegebenen Werte ist.
Unicode weist jedem Zeichen einen einzigartigen numerischen Wert, einen Codepunkt, zu. Zum Beispiel wird der Codepunkt fr "A" als U+0041 angegeben. Manchmal knnen jedoch mehr als ein Codepunkt oder eine Sequenz von Codepunkten dasselbe abstrakte Zeichen darstellen das Zeichen "" zum Beispiel kann durch einen der folgenden dargestellt werden:
"n" (U+006E) gefolgt von dem Codepunkt fr die kombinierende Tilde (U+0303).const string1 = "\u00F1";
const string2 = "\u006E\u0303";
console.log(string1); //
console.log(string2); //
Da die Codepunkte jedoch unterschiedlich sind, wird die Zeichenfolgenvergleichung sie nicht als gleich behandeln. Und da die Anzahl der Codepunkte in jeder Version unterschiedlich ist, haben sie sogar unterschiedliche Lngen.
const string1 = "\u00F1"; //
const string2 = "\u006E\u0303"; //
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2
Die normalize()-Methode hilft, dieses Problem zu lsen, indem sie einen String in eine normalisierte Form konvertiert, die fr alle Sequenzen von Codepunkten, die dasselbe Zeichen darstellen, einheitlich ist. Es gibt zwei Hauptnormalisierungsformen, eine basierend auf kanonischer quivalenz und die andere auf Kompatibilitt.
In Unicode haben zwei Sequenzen von Codepunkten kanonische quivalenz, wenn sie dieselben abstrakten Zeichen darstellen und optisch und vom Verhalten her immer gleich erscheinen sollten (zum Beispiel sollten sie immer auf die gleiche Weise sortiert werden).
Sie knnen normalize() mit den Argumenten "NFD" oder "NFC" verwenden, um eine Form des Strings zu erzeugen, die fr alle kanonisch quivalenten Strings gleich ist. Im folgenden Beispiel normalisieren wir zwei Darstellungen des Zeichens "":
let string1 = "\u00F1"; //
let string2 = "\u006E\u0303"; //
string1 = string1.normalize("NFD");
string2 = string2.normalize("NFD");
console.log(string1 === string2); // true
console.log(string1.length); // 2
console.log(string2.length); // 2
Beachten Sie, dass die Lnge der normalisierten Form unter "NFD" 2 ist. Das liegt daran, dass "NFD" Ihnen die zerlegte Version der kanonischen Form gibt, in der einzelne Codepunkte in mehrere kombinierende aufgeteilt werden. Die zerlegte kanonische Form fr "" ist "\u006E\u0303".
Sie knnen "NFC" angeben, um die zusammengesetzte kanonische Form zu erhalten, in der mehrere Codepunkte durch einzelne Codepunkte ersetzt werden, wenn mglich. Die zusammengesetzte kanonische Form fr "" ist "\u00F1":
let string1 = "\u00F1"; //
let string2 = "\u006E\u0303"; //
string1 = string1.normalize("NFC");
string2 = string2.normalize("NFC");
console.log(string1 === string2); // true
console.log(string1.length); // 1
console.log(string2.length); // 1
console.log(string2.codePointAt(0).toString(16)); // f1
In Unicode sind zwei Sequenzen von Codepunkten kompatibel, wenn sie dieselben abstrakten Zeichen darstellen und in einigen aber nicht unbedingt allen Anwendungen gleich behandelt werden sollten.
Alle kanonisch quivalenten Sequenzen sind ebenfalls kompatibel, aber nicht umgekehrt.
Zum Beispiel:
"" dar. Er ist kompatibel mit zwei aufeinander folgenden U+0066 Codepunkten ("ff")."" dar. Er ist kompatibel mit dem U+0044 Codepunkt ("D").In einigen Aspekten (wie Sortierung) sollten sie als quivalent behandelt werden in anderen (wie der visuellen Darstellung) jedoch nicht, daher sind sie nicht kanonisch quivalent.
Sie knnen normalize() mit den Argumenten "NFKD" oder "NFKC" verwenden, um eine Form des Strings zu erzeugen, die fr alle kompatiblen Strings gleich ist:
let string1 = "\uFB00";
let string2 = "\u0066\u0066";
console.log(string1); //
console.log(string2); // ff
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2
string1 = string1.normalize("NFKD");
string2 = string2.normalize("NFKD");
console.log(string1); // ff <- visual appearance changed
console.log(string2); // ff
console.log(string1 === string2); // true
console.log(string1.length); // 2
console.log(string2.length); // 2
Bei der Anwendung der Kompatibilittsnormalisierung ist es wichtig zu berlegen, was Sie mit den Zeichenfolgen vorhaben, da die normalisierte Form nicht fr alle Anwendungen geeignet sein knnte. Im obigen Beispiel ist die Normalisierung fr die Suche geeignet, da sie einem Benutzer ermglicht, die Zeichenfolge durch die Suche nach "f" zu finden. Aber sie mag fr die Anzeige nicht geeignet sein, da die visuelle Darstellung unterschiedlich ist.
Wie bei der kanonischen Normalisierung knnen Sie nach zerlegten oder zusammengesetzten kompatiblen Formen fragen, indem Sie "NFKD" oder "NFKC" entsprechend bergeben.
// Initial string
// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
// U+0323: COMBINING DOT BELOW
const str = "\u1E9B\u0323";
// Canonically-composed form (NFC)
// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
// U+0323: COMBINING DOT BELOW
str.normalize("NFC"); // '\u1E9B\u0323'
str.normalize(); // same as above
// Canonically-decomposed form (NFD)
// U+017F: LATIN SMALL LETTER LONG S
// U+0323: COMBINING DOT BELOW
// U+0307: COMBINING DOT ABOVE
str.normalize("NFD"); // '\u017F\u0323\u0307'
// Compatibly-composed (NFKC)
// U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
str.normalize("NFKC"); // '\u1E69'
// Compatibly-decomposed (NFKD)
// U+0073: LATIN SMALL LETTER S
// U+0323: COMBINING DOT BELOW
// U+0307: COMBINING DOT ABOVE
str.normalize("NFKD"); // '\u0073\u0323\u0307'
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-string.prototype.normalize |
Stringanchor()at()big()blink()bold()charAt()charCodeAt()codePointAt()concat()endsWith()fixed()fontcolor()fontsize()includes()indexOf()isWellFormed()italics()lastIndexOf()link()localeCompare()match()matchAll()normalize()padEnd()padStart()repeat()replace()replaceAll()search()slice()small()split()startsWith()strike()sub()substr()substring()sup()toLocaleLowerCase()toLocaleUpperCase()toLowerCase()toString()toUpperCase()toWellFormed()trim()trimEnd()trimStart()valueOf()[Symbol.iterator]()Object/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |