String.prototype.isWellFormed()
åºçº¿
广æ³å¯ç¨
èª 2023å¹´10æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
String å¼ç isWellFormed() æ¹æ³è¿åä¸ä¸ªè¡¨ç¤ºè¯¥å符串æ¯å¦å
å«åç¬ä»£ç项çå¸å°å¼ã
è¯æ³
isWellFormed()
è¿åå¼
妿å符串ä¸å
å«åç¬ä»£ç项ï¼è¿å trueï¼å¦åè¿å falseã
æè¿°
JavaScript ä¸çåç¬¦ä¸²æ¯ UTF-16 ç¼ç çãUTF-16 ç¼ç 䏿代çå¯¹çæ¦å¿µï¼è¿ä¸æ¦å¿µå¨ UTF-16 å符ãUnicode ç ä½ååç´ ç°é¨åæè¯¦ç»ä»ç»ã
isWellFormed() è®©ä½ è½å¤æµè¯ä¸ä¸ªå符串æ¯å¦æ¯æ ¼å¼æ£ç¡®çï¼å³ä¸å
å«åç¬ä»£ç项ï¼ãç±äºå¼æè½å¤ç´æ¥è®¿é®å符串çå
é¨è¡¨ç¤ºï¼ä¸èªå®ä¹å®ç°ç¸æ¯ isWellFormed() æ´é«æãå¦æä½ éè¦å°å符串转æ¢ä¸ºæ ¼å¼æ£ç¡®çå符串ï¼å¯ä»¥ä½¿ç¨ toWellFormed() æ¹æ³ãisWellFormed() è®©ä½ å¯ä»¥å¯¹æ ¼å¼æ£ç¡®åæ ¼å¼é误çå符串è¿è¡ä¸åçå¤çï¼æ¯å¦æåºä¸ä¸ªé误æå°å
¶æ è®°ä¸ºæ æã
示ä¾
>ä½¿ç¨ isWellFormed()
const strings = [
// åç¬çå导代ç
"ab\uD800",
"ab\uD800c",
// åç¬çå尾代ç
"\uDFFFab",
"c\uDFFFab",
// æ ¼å¼æ£ç¡®
"abc",
"ab\uD83D\uDE04c",
];
for (const str of strings) {
console.log(str.isWellFormed());
}
// è¾åºï¼
// 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.
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.iswellformed> |