空白文字の種類
「空白」と一口に言っても、テキストデータには多くの種類の空白文字が存在します。見た目は似ていても、文字コードが異なるため区別して扱う必要があります。
- 半角スペース:U+0020。最も一般的なスペース
- 全角スペース:U+3000。日本語文書でよく使われる
- タブ文字(\t):U+0009。インデントやTSVの区切りに使用
- ノーブレークスペース(NBSP):U+00A0。改行されないスペース(HTMLの )
- ゼロ幅スペース:U+200B。表示上は見えないが文字として存在する(テキストのコピペで混入することがある)
入力バリデーションでの問題
ユーザー入力の「名前」フィールドに全角スペースや前後のスペースが含まれると、データベースに意図しない値が保存されます。入力を受け取る際は必ずトリム処理を行いましょう。
// JavaScript: 前後のすべての空白を除去
const trimmed = input.trim()
// 全角スペースも含めて除去
const normalized = input.replace(/^[\s\u3000]+|[\s\u3000]+$/g, '')
テキスト処理での正規化
連続するスペースを1つにまとめる正規化処理は、HTMLの表示(CSSのwhite-space: normalがデフォルトで複数スペースを1つに折りたたむ)やテキスト比較でよく使います。
// 連続する空白を1スペースに正規化
const normalized = text.replace(/\s+/g, ' ').trim()
ゼロ幅スペースへの対処
Webからコピーしたテキストにゼロ幅スペースが混入していることがあります。フォームのバリデーションでも引っかからないため気づきにくく、検索で見つからないなどの不具合の原因になります。テキスト処理時には明示的に除去することをおすすめします。