majima.netホーム > PHP-HITORIGOTO > Validation

Validation :: 入力チェッククラス

2005年8月21日

概要

Validationクラスは入力フォームの項目値に対して、必須入力・入力規則をチェックし、エラーがある場合は通知をする、という機能を実装したクラスです。
いくつか課題もありますが、実用にも使っていて問題なく動いています。
このクラスでは、入力値のチェックとして、

  • 日付チェック
  • 数値入力チェック
  • E-Mailのチェック
  • 郵便/電話番号チェック
  • 正規表現によるチェック
  • 入力値の項目長のチェック

を行うことができます。
これらのチェックする内容などはすべて設定ファイル(iniファイル)に記述をして管理することができます。

使い方

まずは、入力チェック内容を定義する設定ファイル(例: validation.ini)を準備します。 parse_ini_file()関数で読み込み可能な設定ファイルとして記述をします。
次に、PHPのソース中で Validationクラスを宣言し、入力チェックの開始を要求します。
設定ファイルに記述したチェック内容に引っかかる場合は、エラーとしてそのエラーの内容が配列で返されます。従って返される配列の要素数が 0 だった場合はエラーがないということになります(ここもうちょっと何とかしたいですね)。

例; validation.ini

[mailform]
name_NO = 010
name_TITLE = 氏名
name_CHECK = ^,+$
name_LENGTH = 30
name_MESSAGE = 氏名を入力してください。

email_NO = 020
email_TITLE = メールアドレス
email_CHECK = is_email
email_LENGTH = 80
email_MESSAGE = E-mailアドレスが正しくありません。

例; PHPソースファイル

require_once "Validation.php";
$errors = Validation::getInstance("validation.ini", "mailform");

設定ファイルの記述

[action_name] は入力チェックを行いたいフォーム・アクションの名前を表しています。一つの設定ファイルの中に複数の [action_name]を定義することで、各アクションごとの入力チェックを定義することができます。

[action_name]に続いて、入力チェックを行いたい項目・内容を記述します。基本的には 項目名_suffix という形で記述をします。項目名はFORM中でチェックを行いたい項目名です。<input name="項目名" type="text" /> のnameの部分です。
suffix は項目名ごとにいくつか定義ができます。項目名が、emailの場合は email_NO, email_TITLEなどのように記述します。

NO
表示順序。エラーの戻り値として配列を返すのですが、その表示順序を定義します。
TITLE
チェックを行う項目名。エラーのあった項目をエラー画面で表示する場合はこの値が項目の名前として表示されます。
CHECK
入力チェック規則の定義。is_email, is_number, is_tel, is_zip, is_date のほかに正規表現も記述することができます。
is_date を指定した場合は、項目名_year - 項目名_month - 項目名_day の3つの項目から日付データを構築してチェックを行うように動きます。
LENGTH
最大入力長を定義します。
GLUE
フォームの項目名を tel[] のように配列で定義することがあります。そのようなときにすべての項目を連結してチェックを行いたいときがあります(あるか?)。そのときにそれらを何で連結するか?というものを定義します。 - とした場合は xxx-xxx-xxx のようになります。
MESSAGE
入力エラーがあったときに表示するメッセージを定義します。

設定ファイルとは別に同じフォームの中で入力の間違いがないかどうかの確認をするために、もう一度入力して下さい、という項目を作ることがあります。E-mail, パスワードなどよくありますね。そのようなときは、password という項目と別に、password_COMPAREという項目を作成します。すると、この2つの項目の値を比較して間違いがないかをチェックします。

extraチェック - 設定ファイルでは定義できない入力チェックの場合

設定ファイルで定義することが不可能な入力チェックもあります。
例えば、いくつかの項目を組み合わせて3つ以上不備があると駄目だとか、DBにすでに登録済みの値かどうかをチェックするだとか、です。

そのようなチェックに対しては、Validationクラスを extendsしてcheckItemExtar() という関数に定義をします。
チェックする値を定義して、Validationクラスで使用するエラー配列にそのエラーの内容を構築します。

例: checkItemExtraのサンプル

class testValidation extends Validatio { 
    function checkItemExtra() {
        if ($_POST["userid"] != "majima") {
            $errors["100"] = array( "key" => "userid"
                    ,"title" => "ユーザーID"
                    ,"message" => "エラーメッセージ"
                    ,"err_value" => $_POST["userid"]);

        }
        return $errors;
    }
}

エラー内容の表示の仕方

エラーの内容は配列の形で返されます。
array("エラー番号" => array("key" => "エラー項目名(フィールド名)", "title" => "項目名称(日本語名称など)", "message" => "エラー時のエラーメッセージ", "err_value" => "エラーとなった値", err_class => "エラー時のCSSスタイルシート" ), ..... 以下、エラー番号ごとにつづく、、) のように値がつくられます。

あとはこの配列を用いていろいろとエラーの表示をすることができます。

  • フォーム丈夫にまとめてエラーを表示する
  • フォームの各項目をハイライトするなどして、エラーを表示する(UI的にはこれが一番見やすいかな?)

などですね。

 

::PHPライブラリ:: ::旧ライブラリ:: お勧めの本