String.isWellFormed()

isWellFormed() - чи містить рядок самотню сурогатну пару UTF-16.

Синтаксис:

str.isWellFormed();

Параметри:

str - рядок який необхідно перевірити.

Опис:

isWellFormed() метод об'єкта String який перевіряє чи містить рядок самотню сурогатну пару (lone surrogates). Метод повертає true якщо не містить самотніх сурогатних пар, false - містить самотні сурогатні пари.

Рядок закодований у UTF-16 містить сурогатні пари. Так як деякі символи у UTF-16, наприклад емодзі або символи з рідкісних алфавітів, займають два кодові символи (сурогатна пара). Якщо рядок містить некоректну сурогатну пару — він вважається неправильно сформованим рядком - що може виникнути помилка при роботі з таким рядкои у методі encodeURI() i encodeURIComponent().

Метод String.isWellFormed() входить у специфікацію ES2024.

Приклад:

var s='test'; alert( s.isWellFormed() ); //true var s="t\uD803"; alert( s.isWellFormed() ); //false Приклад можливих помилок у методі encodeURIComponent() при роботі з рядком який має самотні сурогатні пари: var url = "https://example.com.ua/?test=\uD803", codeUrl=''; codeUrl=encodeURIComponent(url); // URIError: URI malformed console.log(codeUrl); Щоб уникати таких помилок можна перевірити на наявність самотніх сурогатних пар і якщо вони присутні за допомогою toWellFormed() замінити їх на : var url = "https://example.com.ua/?test=\uD803", codeUrl=''; if(url.isWellFormed()==true) codeUrl=encodeURIComponent(url); else codeUrl=encodeURIComponent(url.toWellFormed()); console.log(codeUrl);