aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/string/normalize/index.html
blob: 5c556cdb4a55825c10b9b9ab4f004e040e3af1c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
---
title: String.prototype.normalize()
slug: Web/JavaScript/Reference/Global_Objects/String/normalize
tags:
  - ECMAScript6
  - JavaScript
  - Method
  - Prototype
  - Reference
  - String
  - Unicode
translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize
---
<div>{{JSRef("Global_Objects", "String")}}</div>

<h2 id="Summary">Сводка</h2>

<p>Метод <strong><code>normalize()</code></strong> возвращает форму нормализации Юникода данной строки (если значение не является строкой, сначала оно будет в неё преобразовано).</p>

<p>Одна из особенностей Юникода - возможность считать два разных символа эквивалентными при выполнении сортировки и иных операций, которые основаны на сравнении.</p>

<p>Виды эквивалентности:<br>
 - первый - каноническая эквивалентность, когда две последовательности code point являются полностью взаимозаменяемыми.</p>

<p>- второй - совместимость - две совместимые последовательности code point выглядят по-разному, но в некоторых случаях они могут быть взаимозаменяемыми.</p>

<p>'æ' взаимозаменяемый 'ae', но они не являются строго эквивалентными, если не провести некоторую нормализацию</p>

<h2 id="Syntax">Синтаксис</h2>

<pre class="syntaxbox"><code><var>str</var>.normalize(<var>[form</var>])</code></pre>

<h3 id="Parameters">Параметры</h3>

<dl>
 <dt><code>form</code></dt>
 <dd>Одно из значений <code>"NFC"</code>, <code>"NFD"</code>, <code>"NFKC"</code> или <code>"NFKD"</code>, определяющих форму нормализации Юникода. Если параметр опущен или равен {{jsxref("Global_Objects/undefined", "undefined")}}, будет использоваться значение <code>"NFC"</code>.
 <ul>
  <li><code>NFC</code> —  форма нормализации канонической композицией (Normalization Form Canonical Composition, 'NFC'), по умолчанию;</li>
  <li><code>NFD</code> — форма нормализации канонической декомпозицией (Normalization Form Canonical Decomposition, 'NFD');</li>
  <li><code>NFKC</code> — форма нормализации совместимой композицией (Normalization Form Compatibility Composition, 'NFKC');</li>
  <li><code>NFKD</code> — форма нормализации совместимой декомпозицией (Normalization Form Compatibility Decomposition, 'NFKD').</li>
 </ul>
 </dd>
</dl>

<h3 id="Throws">Выбрасываемые исключения</h3>

<dl>
 <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
 <dd>Если параметр <code>form</code> не является одним из вышеперечисленных значений, будет выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}.</dd>
</dl>

<h2 id="Description">Описание</h2>

<p>Метод <code>normalize()</code> возвращает указанную форму нормализации Юникода строки. Он не изменяет значение самой строки.</p>

<h2 id="Examples">Примеры</h2>

<h3 id="Example_Using_normalize">Пример: использование метода <code>normalize()</code></h3>

<pre class="brush: js">let valueStr = ['h', 'ĥ', 'æ', 'ae', 'g', 'ġ'],
    normArr = valueStr.map(function (text) {
        return text.normalize(); // (по умолчанию 'NFC') normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, æ, ġ, ĥ]</span></span></span></span>
        //return text.normalize('NFD'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, ġ, h, ĥ, æ]</span></span></span></span>
        //return text.normalize('NFKC'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, æ, ġ, ĥ]</span></span></span></span>
        //return text.normalize('NFKD'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, ġ, h, ĥ, æ]</span></span></span></span>
    });

//После приведение строк в нормальную форму, мы можем провести сортировку, массива:
normArr.sort(function (f,s) {
    if (f &lt; s) {
        return -1;
    } else if (f === s) {
        return 0;
    } else {
        return 1;
    }
});

//Приведение к нормальной форме можно выполнить во время сортировки. Нормализацию при этом можно выполнять с помощью разных форм нормализации
let valueStrNorm = ['h', 's', 'ĥ', 'æ', 'ș', 'ae', 'g', 'ġ'];
valueStrNorm.sort(function (first, second) {
    let fN = first.normalize(),
        sN = second.normalize('NFKC');

    if (fN &lt; sN) {
        return -1;
    } else if (fN === sN) {
        return 0;
    } else {
        return 1;
    }
});

valueStrNorm.join(', ');//-&gt; <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, s, æ, ġ, ĥ, ș</span></span></span></span>
</pre>

<h2 id="Specifications">Спецификации</h2>

{{Specifications}}

<h2 id="Browser_compatibility">Совместимость с браузерами</h2>

<p>{{Compat}}</p>

<h2 id="See_also">Смотрите также</h2>

<ul>
 <li><a href="http://www.unicode.org/reports/tr15/">Приложение №15 к стандарту Юникода: формы нормализации Юникода</a></li>
 <li><a href="http://en.wikipedia.org/wiki/Unicode_equivalence">Эквивалентность в Юникоде</a></li>
</ul>