テキスト比較のための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レスポンス)で一度正規化し、各比較時に繰り返し行わないようにします。
ユースケース
テキストを比較するすべてのアプリケーションの基本:認証システム、データベースの重複検出、スペルチェッカー、オートコンプリートシステム、期待値と実際の出力を比較するテストフレームワーク。