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() メソッドと組み合わせて使用することで、文字列の整形式化を行うことができます。

脚註

編集
  1. ^ これは、文字列が有効な UTF-16 エンコーディングであるかどうかを判定するために使用されます。

外部リンク

編集