テキスト比較のためのUnicode正規化

正規化を使用してUnicodeテキスト文字列を正しく比較する方法を学びます。異なるコードポイント表現により視覚的に同一の文字列が等価チェックに失敗する微妙なバグを回避します。

Best Practices

詳細な説明

正確なテキスト比較のための正規化

文字列比較はUnicode正規化を使用する最も一般的な理由です。正規化なしでは、視覚的に同一の2つの文字列が等価チェックに失敗する可能性があります。

問題

const a = "é";      // U+00E9(合成済み)
const b = "é";     // U+0065 + U+0301(分解済み)
a === b;                  // false!

解決策

a.normalize("NFC") === b.normalize("NFC");  // true

シナリオ別推奨形式

シナリオ 推奨形式
正確なテキスト比較 NFC or NFD
検索/インデックス NFKC
ユーザー名比較 NFKC + ケースフォールド
ファイルパス比較 NFC
暗号ハッシュ NFC

パフォーマンスのヒント

入力時点(フォーム送信、ファイル読み込み、APIレスポンス)で一度正規化し、各比較時に繰り返し行わないようにします。

ユースケース

テキストを比較するすべてのアプリケーションの基本:認証システム、データベースの重複検出、スペルチェッカー、オートコンプリートシステム、期待値と実際の出力を比較するテストフレームワーク。

試してみる — Unicode Normalizer

フルツールを開く