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 (после сортировки) -> [<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 (после сортировки) -> [<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 (после сортировки) -> [<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 (после сортировки) -> [<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 < 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 < sN) {
return -1;
} else if (fN === sN) {
return 0;
} else {
return 1;
}
});
valueStrNorm.join(', ');//-> <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>
|