diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
| commit | 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch) | |
| tree | a9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/global_objects/string/normalize | |
| parent | 074785cea106179cb3305637055ab0a009ca74f2 (diff) | |
| download | translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.gz translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.bz2 translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.zip | |
initial commit
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/string/normalize')
| -rw-r--r-- | files/uk/web/javascript/reference/global_objects/string/normalize/index.html | 226 |
1 files changed, 226 insertions, 0 deletions
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 +--- +<div>{{JSRef}}</div> + +<p>Метод <strong><code>normalize()</code></strong> повертає рядок у формі нормалізації Юнікоду.</p> + +<div>{{EmbedInteractiveExample("pages/js/string-normalize.html", "taller")}}</div> + + + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox"><code><var>str</var>.normalize([<var>form</var>])</code></pre> + +<h3 id="Параметри">Параметри</h3> + +<dl> + <dt><code><var>form</var></code> {{optional_inline}}</dt> + <dd> + <p>Одне зі значень <code>"NFC"</code>, <code>"NFD"</code>, <code>"NFKC"</code> або <code>"NFKD"</code>, що вказують форму нормалізації Юнікоду. Якщо не вказана, або дорівнює {{jsxref("undefined")}}, використовується <code>"NFC"</code>.</p> + + <p>Ці значення означають наступне:</p> + + <dl> + <dt><code>"NFC"</code></dt> + <dd>Канонічна декомпозиція, з подальшою канонічною композицією.</dd> + <dt><code>"NFD"</code></dt> + <dd>Канонічна декомпозиція.</dd> + <dt><code>"NFKC"</code></dt> + <dd>Сумісна декомпозиція, з подальшою <em>канонічною</em> композицією.</dd> + <dt><code>"NFKD"</code></dt> + <dd>Сумісна декомпозиція.</dd> + </dl> + </dd> +</dl> + +<h3 id="Значення_що_повертається">Значення, що повертається</h3> + +<p>Рядок, що містить форму нормалізації Юнікоду для наданого рядка.</p> + +<h3 id="Помилки">Помилки</h3> + +<dl> + <dt>{{jsxref("RangeError")}}</dt> + <dd>Помилка {{jsxref("RangeError")}} викидається, якщо <code>form</code> не є одним з наведених вище значень.</dd> +</dl> + +<h2 id="Опис">Опис</h2> + +<p>Юнікод присвоює унікальне числове значення, яке називається <em>кодом символа</em>, кожному символу. Наприклад, кодом символа <code>"A"</code> є U+0041. Однак, іноді більше, ніж один код символа, або послідовність кодів, можуть представляти один і той самий абстрактний символ — наприклад, символ <code>"ñ"</code> може бути представлений:</p> + +<ul> + <li>Єдиним кодом символа U+00F1.</li> + <li>Кодом символа <code>"n"</code> (U+006E) з наступним кодом символа для об'єднуючої тильди (U+0303).</li> +</ul> + +<pre class="brush: js">let string1 = '\u00F1'; +let string2 = '\u006E\u0303'; + +console.log(string1); // ñ +console.log(string2); // ñ +</pre> + +<p>Однак, оскільки коди символів відрізняються, порівняння рядків не вважатиме їх рівними. А оскільки кількість кодів символів у цих варіантах різна, то вони навіть мають різні довжини.</p> + +<pre class="brush: js">let string1 = '\u00F1'; // ñ +let string2 = '\u006E\u0303'; // ñ + +console.log(string1 === string2); // false +console.log(string1.length); // 1 +console.log(string2.length); // 2 +</pre> + +<p>Метод <code>normalize()</code> допомагає вирішити цю проблему, перетворюючи рядок у нормалізовану форму, спільну для усіх послідовностей кодів символів, які представляють однакові символи. Існують дві основні форми нормалізації, одна базується на <strong>канонічній еквівалентності</strong>, а інша на <strong>сумісності</strong>.</p> + +<h3 id="Нормалізація_на_основі_канонічної_еквівалентності">Нормалізація на основі канонічної еквівалентності</h3> + +<p>В Юнікоді дві послідовності кодів символів канонічно еквівалентні, якщо вони відображають однакові абстрактні символи, і повинні завжди мати однакове візуальне відображення та поведінку (для прикладу, вони завжди повинні сортуватися однаковим чином).</p> + +<p>Ви можете скористатись методом <code>normalize()</code>, використовуючи аргументи <code>"NFD"</code> або <code>"NFC"</code>, щоб створити форму рядка, що буде однаковою для усіх канонічно еквівалентних рядків. У наведеному нижче прикладі ми нормалізуємо два відображення символу <code>"ñ"</code>:</p> + +<pre class="brush: js">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 +</pre> + +<h4 id="Зєднана_та_розкладена_форми">З'єднана та розкладена форми</h4> + +<p>Зауважте, що довжина нормалізованої форми при використанні <code>"NFD"</code> дорівнює <code>2</code>. Це тому, що <code>"NFD"</code> дає вам <strong>розкладену</strong> версію канонічної форми, в якій один код символа розбивається на множину складових. Розкладеною канонічною формою для <code>"ñ"</code> є <code>"\u006E\u0303"</code>.</p> + +<p>Ви можете вказати <code>"NFC"</code>, щоб отримати <strong>з'єднану</strong> канонічну форму, в якій множина кодів символів замінюється єдиним кодом символу, де це можливо. З'єднаною канонічною формою для <code>"ñ"</code> є <code>"\u00F1"</code>:</p> + +<pre class="brush: js">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</pre> + +<h3 id="Нормалізація_на_основі_сумісності">Нормалізація на основі сумісності</h3> + +<p>В Юнікоді дві послідовності кодів символів є сумісними, якщо вони представляють однакові абстрактні символи, і мають сприйматися однаково у деяких — але не обов'язково в усіх — застосуваннях.</p> + +<p>Усі канонічно еквівалентні послідовності також є сумісними, але не навпаки.</p> + +<p>Наприклад:</p> + +<ul> + <li>код символа U+FB00 відображає <a href="/uk/docs/Glossary/Ligature">лігатуру</a> <code>"ff"</code>. Він сумісний з двома послідовними кодами символів U+0066 (<code>"ff"</code>).</li> + <li>код символа U+24B9 відображає символ <code><span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="cm-string">"Ⓓ"</span></span></span></span></code>. Він сумісний з кодом символа U+0044 (<code>"D"</code>).</li> +</ul> + +<p>У деяких ситуаціях (таких, як сортування) вони мають сприйматися як еквівалентні, а у деяких (таких, як візуальне відображення) — ні, отже, вони не є канонічно еквівалентними.</p> + +<p>Ви можете скористатись методом <code>normalize()</code>, використовуючи аргументи <code>"NFKD"</code> або <code>"NFKC"</code>, щоб створити форму рядка, яка буде однаковою для усіх сумісних рядків:</p> + +<pre class="brush: js">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 +</pre> + +<p>Застосовуючи сумісну нормалізацію, важливо враховувати, що саме ви намагаєтесь зробити з рядками, оскільки нормалізована форма може не підходити для усіх застосувань. У наведеному вище прикладі нормалізація підходить для пошуку, бо дозволяє користувачу знайти рядок пошуком <code>"f"</code>. Але вона може не підходити для відображення, бо зовнішній вигляд символа відрізняється.</p> + +<p>Як і у випадку з канонічною нормалізацією, ви можете застосовувати розкладену або з'єднану форми, передаючи, відповідно, <code>"NFKD"</code> або <code>"NFKC"</code>.</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_normalize">Використання <code>normalize()</code></h3> + +<pre class="brush: js">// Початковий рядок + +// 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' +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("javascript.builtins.String.normalize")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li><a href="http://www.unicode.org/reports/tr15/">Unicode Standard Annex #15, Unicode Normalization Forms</a></li> + <li><a href="http://en.wikipedia.org/wiki/Unicode_equivalence">Unicode equivalence</a></li> +</ul> |
