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
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);