バリデーションとは
日本語で「確認」や「検証」を意味し、データの妥当性を表します。
①入力チェック
必須の入力項目に抜け漏れがないかチェックする。テキスト以外にも、利用規約確認後のチェックボックスの選択漏れも含まれます。
②データの形式チェック
文字の種類・値の範囲・桁数などと幅広く、
・メールアドレスに@(アットマーク)が含まれていない
・パスワードの要件(例:アルファベットや記号など、複数の文字種を入力する)を満たしていない
という様に、不正データを除外する。
③データの妥当性
複数の入力データとの関連チェックを行う。例えば問診票に飲酒の項目があり、「飲む」を選択した場合は頻度と量を入力する様にする
上の登録フォームではサービスを利用するために、
・どの項目の入力が必要かを米印で表す
・どう設定したら良いかの説明文を載せる
・ユーザーに合ったサービスを提供するため、生年月日や身長も入力して貰う
バリデーションがなぜ必要か?
①妥当性のないデータだと、内部処理が正常に動作しない
「妥当性のない = 確認する必要がない」となると不正データも許容してしまい、内部処理に異常動作が起きやすくなります。「どんなデータで処理するか?」が重要なポイントですね。
②データ形式の統一が必要である
例えば電話番号の場合、開始番号に2桁・3桁・4桁があるのはご存知でしたか?
2桁:国内の都道府県などを区別ために使う市外局番
3桁:携帯電話やPHSなどの番号
4桁:フリーダイヤルやナビダイヤルの番号
そして入力する時は、「-(ハイフン)」も入れるのが一般的。それを除外してしまったらどうなるのでしょうか?
例えば「0422559431」の場合、実は複数の開始番号が存在しているんです。
東京都立川市などが指定する「042」→「042-255-9431」
東京都武蔵野市が指定する「0422」→「0422-55-9431」
「-(ハイフン)」なしだと上記のどちらに該当するか分からず、どの地域から発信しているか特定できない。開始番号の桁数から、どの番号なのかを特定するために「-(ハイフン)」も入れるんじゃないかと、私はそう思っています。
バリデーションが必要な理由をこう勘違いしている方が多い!!
ユーザーの入力ミスを防ぐため
入力データの確認より、入力ルールをユーザーに押しつけている様に思えます。必須項目や入力の説明文が多すぎると、ユーザーが登録せずに離脱してしまうので、
「サービスの利用向上としてこのデータが欲しいです」
の気持ちでバリデーションを実装すれば良いかと思います。
調べてみて分かったこと
バリデーションは、入力ルールをユーザーに押しつけるのではなく、不正データを入力してシステムの異常動作を防ぐためにあるんですね。小数点や記号などデータの種類が豊富だけど、「サービスを利用するにはどんなデータが必要か?」を意識して、バリデーションを実装しようと思いました。