String.prototype.normalize()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2016 г..
Сводка
ÐеÑод normalize() возвÑаÑÐ°ÐµÑ ÑоÑÐ¼Ñ Ð½Ð¾ÑмализаÑии Юникода данной ÑÑÑоки (еÑли знаÑение не ÑвлÑеÑÑÑ ÑÑÑокой, ÑнаÑала оно бÑÐ´ÐµÑ Ð² Ð½ÐµÑ Ð¿ÑеобÑазовано).
Ðдна из оÑобенноÑÑей Юникода - возможноÑÑÑ ÑÑиÑаÑÑ Ð´Ð²Ð° ÑазнÑÑ Ñимвола ÑквиваленÑнÑми пÑи вÑполнении ÑоÑÑиÑовки и инÑÑ Ð¾Ð¿ÐµÑаÑий, коÑоÑÑе оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° ÑÑавнении.
ÐÐ¸Ð´Ñ ÑквиваленÑноÑÑи: - пеÑвÑй - канониÑеÑÐºÐ°Ñ ÑквиваленÑноÑÑÑ, когда две поÑледоваÑелÑноÑÑи code point ÑвлÑÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð·Ð°Ð¼ÐµÐ½ÑемÑми.
- вÑоÑой - ÑовмеÑÑимоÑÑÑ - две ÑовмеÑÑимÑе поÑледоваÑелÑноÑÑи code point вÑглÑдÑÑ Ð¿Ð¾-ÑазномÑ, но в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð¾Ð½Ð¸ могÑÑ Ð±ÑÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð·Ð°Ð¼ÐµÐ½ÑемÑми.
'æ' взаимозаменÑемÑй 'ae', но они не ÑвлÑÑÑÑÑ ÑÑÑого ÑквиваленÑнÑми, еÑли не пÑовеÑÑи некоÑоÑÑÑ Ð½Ð¾ÑмализаÑиÑ
СинÑакÑиÑ
str.normalize([form])
ÐаÑамеÑÑÑ
form-
Ðдно из знаÑений
"NFC","NFD","NFKC"или"NFKD", опÑеделÑÑÑÐ¸Ñ ÑоÑÐ¼Ñ Ð½Ð¾ÑмализаÑии Юникода. ÐÑли паÑамеÑÑ Ð¾Ð¿ÑÑен или Ñавенundefined, бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð·Ð½Ð°Ñение"NFC".NFCâ ÑоÑма ноÑмализаÑии канониÑеÑкой композиÑией (Normalization Form Canonical Composition, 'NFC'), по ÑмолÑаниÑ;NFDâ ÑоÑма ноÑмализаÑии канониÑеÑкой декомпозиÑией (Normalization Form Canonical Decomposition, 'NFD');NFKCâ ÑоÑма ноÑмализаÑии ÑовмеÑÑимой композиÑией (Normalization Form Compatibility Composition, 'NFKC');NFKDâ ÑоÑма ноÑмализаÑии ÑовмеÑÑимой декомпозиÑией (Normalization Form Compatibility Decomposition, 'NFKD').
ÐÑбÑаÑÑваемÑе иÑклÑÑениÑ
RangeError-
ÐÑли паÑамеÑÑ
formне ÑвлÑеÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из вÑÑепеÑеÑиÑленнÑÑ Ð·Ð½Ð°Ñений, бÑÐ´ÐµÑ Ð²ÑбÑоÑено иÑклÑÑениеRangeError.
ÐпиÑание
ÐеÑод normalize() возвÑаÑÐ°ÐµÑ ÑказаннÑÑ ÑоÑÐ¼Ñ Ð½Ð¾ÑмализаÑии Юникода ÑÑÑоки. Ðн не изменÑÐµÑ Ð·Ð½Ð°Ñение Ñамой ÑÑÑоки.
ÐÑимеÑÑ
>ÐÑимеÑ: иÑполÑзование меÑода normalize()
let valueStr = ["h", "ĥ", "æ", "ae", "g", "ġ"],
normArr = valueStr.map(function (text) {
return text.normalize(); // (по ÑмолÑÐ°Ð½Ð¸Ñ 'NFC') normArr (поÑле ÑоÑÑиÑовки) -> [ae, g, h, æ, Ä¡, Ä¥]
//return text.normalize('NFD'); // normArr (поÑле ÑоÑÑиÑовки) -> [ae, g, gÌ, h, hÌ, æ]
//return text.normalize('NFKC'); // normArr (поÑле ÑоÑÑиÑовки) -> [ae, g, h, æ, Ä¡, Ä¥]
//return text.normalize('NFKD'); // normArr (поÑле ÑоÑÑиÑовки) -> [ae, g, gÌ, h, hÌ, æ]
});
//ÐоÑле пÑиведение ÑÑÑок в ноÑмалÑнÑÑ ÑоÑмÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пÑовеÑÑи ÑоÑÑиÑовкÑ, маÑÑива:
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(", "); //-> ae, g, h, s, æ, Ä¡, Ä¥, È
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.normalize> |