小文字変換の使い方:表記統一と比較の前処理
React と react が混在したタグ一覧は扱いにくいものです。小文字に統一すれば、内容はそのままで比較しやすくなります。
本当に必要になる場面
タグやキーワードの一覧は表記が揺れやすいところです。React と react が混ざると、絞り込みや重複削除では別の値として扱われます。小文字に揃えれば重なりが見えます。メール一覧や商品コードも同じです。
もう一つは比較です。大文字小文字だけが違う 2 つの文字列は等しくないと判定されるため、両方を小文字にしてから比べれば、違いが内容にあるのか表記にあるのか分かります。ドメイン名はもともと区別しないため、小文字にしても影響はありません。
- タグ・キーワード・メール一覧の重複削除の前
- 英語文字列の差分確認
- ドメイン名とホスト名の表記統一
失敗しない使い方
統一したい項目だけを変換し、文書全体をまとめて変換しないでください。英文では大文字に意味があります。文頭、固有名詞、NASA や PDF のような略語、iPhone のような製品名は、小文字にすると明確な誤りになります。
URL は特に注意が必要です。ドメインは区別しませんが、パスとクエリは多くのサーバーで区別されるため、/Images/Logo.png と /images/logo.png は別の資源になり得ます。小文字にすると 404 になります。パスワード、API キー、ハッシュ値も同様です。
- 必要な項目だけを変換
- 固有名詞と略語は残す
- URL 全体と秘密情報は変換しない
代替手段と望ましい方法
見た目だけを揃えたいなら CSS の text-transform: lowercase が使えます。データは変わらず、検索やコピーは元の文字のままです。単語の先頭を大文字にしたいならタイトルケース変換、記号の幅を揃えたいなら全角半角変換の仕事です。
プログラムでは、データを書き換えるのではなく比較時に無視するのが定石です。SQL なら LOWER() や ILIKE、Python なら casefold()(ß などは lower() より適切)、JavaScript なら toLowerCase() で比較します。保存値の書き換えは痕跡が残りますが、比較方法の変更は残りません。
よくある質問
メールアドレスを小文字にしても大丈夫ですか?
ドメイン部分は区別しないため問題ありません。@ より前は規格上は区別可能ですが、実際に区別するサービスはほとんどありません。表示や重複削除には使えますが、認証情報は元のままにしてください。
URL を小文字にしたら開けなくなりました。どうすればいいですか?
ドメインは区別しませんが、パスやクエリは多くのサーバーで区別されます。Images と images が別資源のことがあるため、ドメインだけを小文字にし、パスは元のまま残してください。
大文字小文字を無視して比較するには?
保存値を書き換えず、比較のときだけ正規化します。SQL は LOWER()、Python は casefold()、JavaScript は toLowerCase() を使ってから比較してください。
関連ツール:小文字変換