一貫性のある両端空白文字取り扱い方針

This page is also available in English.

ユーザー入力のバリデーションに関して Contact Form 7 は基本的に HTML 標準仕様と主要なブラウザー実装のやり方を模倣してきました。しかしながらそこには一つ問題があります。それらによる両端空白文字の取り扱いには一貫性がありません。

例を挙げると、URL 項目に ␣http://example.com␣ (正規の URL の前後に空白文字が付いたもの) を入力することは問題なく、バリデーションエラーも発生しない一方で、メールアドレス項目に ␣example@example.com␣ (正規のメールアドレスの前後に空白文字が付いたもの) を入力すると typeMismatch エラーが発生してバリデーションに失敗します。

もう一つ別の例が必須入力項目に見られます。必須入力項目を空のまま放置すると valueMissing エラーが発生します。何らかの文字を入力することでバリデーションを通過することができますが、文字の種類は本当に何でもよく、空白文字でも構いません。空白文字が必須入力項目のバリデーションを通過するというのは多くの人にとって直観に反することでしょう。

要するに、両端の空白文字を取り除いた後で実行されるバリデーションもあればそうでないものもある、というわけです。

解決策: 一貫性のある方針を導入する

この問題を回避するため、HTML 仕様に無批判に従う従来の姿勢を改め、両端空白文字の取り扱いについての独自の方針を導入します。

その方針とは以下の通り: 入力項目やバリデーションルールのタイプに関係なく、常にバリデーション適用に先立ってユーザー入力値から前後の空白文字を除去します。ここで言う「空白文字」とは単に ASCII のスペース文字 (U+0020) を指すのではなく、Unicode が定義するすべての空白文字が含まれます。

この方針に基づくと、あらゆるバリデーションルールが両端の空白文字が取り除かれた後で適用されることになるため、前述の例にあった ␣example@example.com␣ は正しいメールアドレスとして受け入れられ、また必須入力項目は空白文字のみから成るユーザー入力を却下することになります。

ユーザー入力のバリデーションに関与する全プロダクト (Contact Form 7、スキーマ織りバリデーション等) が今後はこの新方針に従います。