From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/string/normalize/index.html | 226 +++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/string/normalize/index.html (limited to 'files/uk/web/javascript/reference/global_objects/string/normalize') diff --git a/files/uk/web/javascript/reference/global_objects/string/normalize/index.html b/files/uk/web/javascript/reference/global_objects/string/normalize/index.html new file mode 100644 index 0000000000..15b56e2bad --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/string/normalize/index.html @@ -0,0 +1,226 @@ +--- +title: String.prototype.normalize() +slug: Web/JavaScript/Reference/Global_Objects/String/normalize +tags: + - ECMAScript 2015 + - JavaScript + - String + - Unicode + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize +--- +
{{JSRef}}
+ +

Метод normalize() повертає рядок у формі нормалізації Юнікоду.

+ +
{{EmbedInteractiveExample("pages/js/string-normalize.html", "taller")}}
+ + + +

Синтаксис

+ +
str.normalize([form])
+ +

Параметри

+ +
+
form {{optional_inline}}
+
+

Одне зі значень "NFC", "NFD", "NFKC" або "NFKD", що вказують форму нормалізації Юнікоду. Якщо не вказана, або дорівнює {{jsxref("undefined")}}, використовується "NFC".

+ +

Ці значення означають наступне:

+ +
+
"NFC"
+
Канонічна декомпозиція, з подальшою канонічною композицією.
+
"NFD"
+
Канонічна декомпозиція.
+
"NFKC"
+
Сумісна декомпозиція, з подальшою канонічною композицією.
+
"NFKD"
+
Сумісна декомпозиція.
+
+
+
+ +

Значення, що повертається

+ +

Рядок, що містить форму нормалізації Юнікоду для наданого рядка.

+ +

Помилки

+ +
+
{{jsxref("RangeError")}}
+
Помилка {{jsxref("RangeError")}} викидається, якщо form не є одним з наведених вище значень.
+
+ +

Опис

+ +

Юнікод присвоює унікальне числове значення, яке називається кодом символа, кожному символу. Наприклад, кодом символа "A" є U+0041. Однак, іноді більше, ніж один код символа, або послідовність кодів, можуть представляти один і той самий абстрактний символ — наприклад, символ "ñ" може бути представлений:

+ + + +
let string1 = '\u00F1';
+let string2 = '\u006E\u0303';
+
+console.log(string1);  //  ñ
+console.log(string2);  //  ñ
+
+ +

Однак, оскільки коди символів відрізняються, порівняння рядків не вважатиме їх рівними. А оскільки кількість кодів символів у цих варіантах різна, то вони навіть мають різні довжини.

+ +
let string1 = '\u00F1';            // ñ
+let string2 = '\u006E\u0303';      // ñ
+
+console.log(string1 === string2); // false
+console.log(string1.length);      // 1
+console.log(string2.length);      // 2
+
+ +

Метод normalize() допомагає вирішити цю проблему, перетворюючи рядок у нормалізовану форму, спільну для усіх послідовностей кодів символів, які представляють однакові символи. Існують дві основні форми нормалізації, одна базується на канонічній еквівалентності, а інша на сумісності.

+ +

Нормалізація на основі канонічної еквівалентності

+ +

В Юнікоді дві послідовності кодів символів канонічно еквівалентні, якщо вони відображають однакові абстрактні символи, і повинні завжди мати однакове візуальне відображення та поведінку (для прикладу, вони завжди повинні сортуватися однаковим чином).

+ +

Ви можете скористатись методом normalize(), використовуючи аргументи "NFD" або "NFC", щоб створити форму рядка, що буде однаковою для усіх канонічно еквівалентних рядків. У наведеному нижче прикладі ми нормалізуємо два відображення символу "ñ":

+ +
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
+
+ +

З'єднана та розкладена форми

+ +

Зауважте, що довжина нормалізованої форми при використанні "NFD" дорівнює 2. Це тому, що "NFD" дає вам розкладену версію канонічної форми, в якій один код символа розбивається на множину складових. Розкладеною канонічною формою для "ñ" є "\u006E\u0303".

+ +

Ви можете вказати "NFC", щоб отримати з'єднану канонічну форму, в якій множина кодів символів замінюється єдиним кодом символу, де це можливо. З'єднаною канонічною формою для "ñ" є "\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
+ +

Нормалізація на основі сумісності

+ +

В Юнікоді дві послідовності кодів символів є сумісними, якщо вони представляють однакові абстрактні символи, і мають сприйматися однаково у деяких — але не обов'язково в усіх — застосуваннях.

+ +

Усі канонічно еквівалентні послідовності також є сумісними, але не навпаки.

+ +

Наприклад:

+ + + +

У деяких ситуаціях (таких, як сортування) вони мають сприйматися як еквівалентні, а у деяких (таких, як візуальне відображення) — ні, отже, вони не є канонічно еквівалентними.

+ +

Ви можете скористатись методом normalize(), використовуючи аргументи "NFKD" або "NFKC", щоб створити форму рядка, яка буде однаковою для усіх сумісних рядків:

+ +
let string1 = '\uFB00';
+let string2 = '\u0066\u0066';
+
+console.log(string1);             // ff
+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 <- візуальне відображення змінилось
+console.log(string2);             // ff
+console.log(string1 === string2); // true
+console.log(string1.length);      // 2
+console.log(string2.length);      // 2
+
+ +

Застосовуючи сумісну нормалізацію, важливо враховувати, що саме ви намагаєтесь зробити з рядками, оскільки нормалізована форма може не підходити для усіх застосувань. У наведеному вище прикладі нормалізація підходить для пошуку, бо дозволяє користувачу знайти рядок пошуком "f". Але вона може не підходити для відображення, бо зовнішній вигляд символа відрізняється.

+ +

Як і у випадку з канонічною нормалізацією, ви можете застосовувати розкладену або з'єднану форми, передаючи, відповідно, "NFKD" або "NFKC".

+ +

Приклади

+ +

Використання normalize()

+ +
// Початковий рядок
+
+// U+1E9B: ЛАТИНСЬКА МАЛА ЛІТЕРА ДОВГА S З КРАПКОЮ ЗГОРИ
+// U+0323: ОБ'ЄДНУЮЧА КРАПКА ВНИЗУ
+let str = '\u1E9B\u0323';
+
+
+// Канонічно-з'єднана форма (NFC)
+
+// U+1E9B: ЛАТИНСЬКА МАЛА ЛІТЕРА ДОВГА S З КРАПКОЮ ЗГОРИ
+// U+0323: ОБ'ЄДНУЮЧА КРАПКА ВНИЗУ
+str.normalize('NFC'); // '\u1E9B\u0323'
+str.normalize();      // такий самий
+
+
+// Канонічно-розкладена форма (NFD)
+
+// U+017F: ЛАТИНСЬКА МАЛА ЛІТЕРА ДОВГА S
+// U+0323: ОБ'ЄДНУЮЧА КРАПКА ВНИЗУ
+// U+0307: ОБ'ЄДНУЮЧА КРАПКА ЗГОРИ
+str.normalize('NFD'); // '\u017F\u0323\u0307'
+
+
+// Сумісно-з'єднана (NFKC)
+
+// U+1E69: ЛАТИНСЬКА МАЛА ЛІТЕРА S З КРАПКОЮ ВНИЗУ ТА КРАПКОЮ ЗГОРИ
+str.normalize('NFKC'); // '\u1E69'
+
+
+// Сумісно-розкладена (NFKD)
+
+// U+0073: ЛАТИНСЬКА МАЛА ЛІТЕРА S
+// U+0323: ОБ'ЄДНУЮЧА КРАПКА ВНИЗУ
+// U+0307: ОБ'ЄДНУЮЧА КРАПКА ЗГОРИ
+str.normalize('NFKD'); // '\u0073\u0323\u0307'
+
+ +

Специфікації

+ + + + + + + + + + + + +
Специфікація
{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}
+ +

Сумісність з веб-переглядачами

+ + + +

{{Compat("javascript.builtins.String.normalize")}}

+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf