String : méthode isWellFormed()
Baseline
Large disponibilité
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis octobre 2023.
La méthode isWellFormed() des valeurs String retourne un booléen indiquant si cette chaîne de caractères contient des substituts isolés.
Syntaxe
isWellFormed()
Paramètres
Aucun.
Valeur de retour
Retourne true si cette chaîne de caractères ne contient aucun substitut isolé, false sinon.
Description
Les chaînes de caractères en JavaScript sont encodées en UTF-16. L'encodage UTF-16 utilise le concept de paires de substituts, qui est présenté en détail dans la section Caractères UTF-16, points de code Unicode et groupes de graphèmes.
isWellFormed() vous permet de tester si une chaîne de caractères est bien formée (c'est-à-dire qu'elle ne contient aucun substitut isolé). Comparée à une implémentation personnalisée, isWellFormed() est plus efficace, car les moteurs peuvent accéder directement à la représentation interne des chaînes de caractères. Si vous devez convertir une chaîne de caractères en une chaîne de caractères bien formée, utilisez la méthode toWellFormed(). isWellFormed() vous permet de traiter différemment les chaînes de caractères mal formées des chaînes de caractères bien formées, par exemple en lançant une erreur ou en la marquant comme invalide.
Exemples
>Utiliser la méthode isWellFormed()
const chainesCaracteres = [
// Substitut isolé en tête
"ab\uD800",
"ab\uD800c",
// Substitut isolé en queue
"\uDFFFab",
"c\uDFFFab",
// Bien formée
"abc",
"ab\uD83D\uDE04c",
];
for (const chaine of chainesCaracteres) {
console.log(chaine.isWellFormed());
}
// Journalise :
// false
// false
// false
// false
// true
// true
Éviter les erreurs dans encodeURI()
encodeURI lève une erreur si la chaîne de caractères passée n'est pas bien formée. Cela peut être évité en utilisant isWellFormed() pour tester la chaîne de caractères avant de la passer à encodeURI().
const malFormee = "http://hfffhd3dea44e9a2d46b4sc090xxcnnnoc6c66.ffgi.hlju.cwkeji.cn/search?q=\uD800";
try {
encodeURI(malFormee);
} catch (e) {
console.log(e); // URIError: URI malformed
}
if (malFormee.isWellFormed()) {
console.log(encodeURI(malFormee));
} else {
console.warn("Chaînes de caractères mal formées rencontrées."); // Chaînes de caractères mal formées rencontrées.
}
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.iswellformed> |