JavaScript/String/prototype/isWellFormed
String.prototype.isWellFormed()
メソッドは、文字列が整形式 UTF-16 文字列であるかどうかを判定するメソッドです。このメソッドは、文字列内に不正なサロゲートペアが含まれていないかをチェックします[1]。
構文
編集str.isWellFormed()
例
編集整形式と不整形式の文字列を判定するプログラム
編集以下のプログラムは、String.prototype.isWellFormed()
を使用して文字列が整形式かどうかを判定します。
// 整形式の文字列 const wellFormed = 'Hello, 世界'; // 通常の文字列と Unicode 文字 console.log(wellFormed.isWellFormed()); // true // 不整形式の文字列 const highSurrogate = '\uD800'; // 高位サロゲートのみ(対応する低位サロゲートがない) console.log(highSurrogate.isWellFormed()); // false const lowSurrogate = '\uDC00'; // 低位サロゲートのみ(対応する高位サロゲートがない) console.log(lowSurrogate.isWellFormed()); // false
このプログラムでは、String.prototype.isWellFormed()
を使用して異なる文字列が整形式かどうかを判定しています。通常の文字列と Unicode 文字を含む wellFormed
は整形式であり、単独の高位サロゲート highSurrogate
または単独の低位サロゲート lowSurrogate
は不整形式です。
サロゲートペアと整形式判定のプログラム
編集以下のプログラムは、String.prototype.isWellFormed()
を使用して正しいサロゲートペアと不正なサロゲートペアを判定します。
// 正しいサロゲートペア(絵文字) const emoji = '😊'; // U+1F60A(サロゲートペアとして表現される) console.log(emoji.isWellFormed()); // true console.log(emoji.codePointAt(0)); // 128522 (0x1F60A) // 不正なサロゲートペアの組み合わせ const invalid = '\uD800\uD801'; // 2つの高位サロゲートが連続している(不正) console.log(invalid.isWellFormed()); // false
このプログラムでは、String.prototype.isWellFormed()
を使用してサロゲートペアの整形式判定を行っています。正しいサロゲートペアを持つ絵文字 emoji
は整形式であり、不正なサロゲートペアの組み合わせ invalid
は不整形式です。
isWellFormedとtoWellFormedを組み合わせたプログラム
編集以下のプログラムは、String.prototype.isWellFormed()
と String.prototype.toWellFormed()
を組み合わせて使用します。
const mixedString = 'Hello, \uD800 World'; // 単独の高位サロゲートを含む文字列 console.log(mixedString.isWellFormed()); // false // 不整形式の文字列を整形式に変換 const wellFormedString = mixedString.toWellFormed(); console.log(wellFormedString.isWellFormed()); // true console.log(wellFormedString); // "Hello, � World"(不正なサロゲートは U+FFFD REPLACEMENT CHARACTER に置換される)
このプログラムでは、String.prototype.isWellFormed()
を使用して文字列が整形式かどうかを判定し、String.prototype.toWellFormed()
を使用して不整形式の文字列を整形式に変換しています。不正なサロゲートは置換文字 (�) に変換されます。
注意点
編集- 整形式の定義: 整形式の UTF-16 文字列とは、単独の高位サロゲートや単独の低位サロゲートを含まない文字列です。
- サロゲートペア: 高位サロゲート (0xD800-0xDBFF) と低位サロゲート (0xDC00-0xDFFF) のペアは、U+10000 から U+10FFFF までの Unicode コードポイントを表現します。
- ES2022: このメソッドは ECMAScript 2022 で導入されました。古いブラウザではサポートされていない可能性があります。
- toWellFormed() との関係:
String.prototype.toWellFormed()
メソッドと組み合わせて使用することで、文字列の整形式化を行うことができます。
脚註
編集- ^ これは、文字列が有効な UTF-16 エンコーディングであるかどうかを判定するために使用されます。
外部リンク
編集