String.prototype.isWellFormed()
Базовая поддержка Широко доступно
Эта возможность хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с октября 2023 года.
Метод isWellFormed() значений String возвращает логическое значение, указывающее, содержит ли эта строка какие-либо одиночные суррогаты.
Синтаксис
isWellFormed()
Параметры
Нет.
Возвращаемое значение
Возвращает true, если эта строка не содержит одиночных суррогатов, и false в противном случае.
Описание
Строки в JavaScript кодируются в UTF-16. Кодирование UTF-16 включает понятие суррогатных пар, которое подробно описано в разделе Символы UTF-16, кодовые точки Unicode и кластеры графем.
isWellFormed() позволяет проверить, является ли строка корректной (то есть не содержит одиночных суррогатов). По сравнению с пользовательской реализацией, isWellFormed() является более эффективным, поскольку движки могут напрямую обращаться к внутреннему представлению строк. Если вам нужно преобразовать строку в корректную строку, используйте метод toWellFormed(). isWellFormed() позволяет обрабатывать некорректные строки иначе, чем корректные, например, генерировать ошибку или помечать их как недопустимые.
Примеры
Использование isWellFormed()
const strings = [
// Lone leading surrogate
"ab\uD800",
"ab\uD800c",
// Lone trailing surrogate
"\uDFFFab",
"c\uDFFFab",
// Well-formed
"abc",
"ab\uD83D\uDE04c",
];
for (const str of strings) {
console.log(str.isWellFormed());
}
// Logs:
// false
// false
// false
// false
// true
// true
Избегание ошибок в encodeURI()
encodeURI генерирует ошибку, если переданная строка некорректна. Этого можно избежать, используя isWellFormed() для проверки строки перед передачей ее в encodeURI().
const illFormed = "https://example.com/search?q=\uD800";
try {
encodeURI(illFormed);
} catch (e) {
console.log(e); // URIError: URI malformed
}
if (illFormed.isWellFormed()) {
console.log(encodeURI(illFormed));
} else {
console.warn("Ill-formed strings encountered."); // Ill-formed strings encountered.
}
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
isWellFormed |
111 |
111 |
119 |
97 |
16.4 |
111 |
119 |
75 |
16.4 |
22.0 |
111 |
16.4 |
1.0.0 |
1.32 |
20.0.0 |
Смотрите также
- Полифил
String.prototype.isWellFormedвcore-js - Полифил es-shims для
String.prototype.isWellFormed String.prototype.toWellFormed()String.prototype.normalize()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/isWellFormed