空白文字の種類

「空白」と一口に言っても、テキストデータには多くの種類の空白文字が存在します。見た目は似ていても、文字コードが異なるため区別して扱う必要があります。

  • 半角スペース: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からコピーしたテキストにゼロ幅スペースが混入していることがあります。フォームのバリデーションでも引っかからないため気づきにくく、検索で見つからないなどの不具合の原因になります。テキスト処理時には明示的に除去することをおすすめします。