2011年11月23日水曜日

yet another な Validator クラス

なんで、世の中に数あるValidatorクラスを作ってるのか、
などと自問自答しながら作ってます。

開発中なのですが、特徴をはっきりさせておくために、ブログでまとめます。

◆まず、面白くも何ともない普通の特徴から。

  • できるだけ簡単に使えるインターフェース、
  • タイプ(テキスト、メールアドレスとか)を指定すると前もって決めておいたルールに従ってバリデーションする、
  • フォーム入力だけでなく、普通の変数・配列でも適用可能。

とかでしょうか。
こういうのルールベースでのバリデーションとか言うのでしょうか。

◆これだけなら、別に作る必要はないわけで、一応自分なりの理由があって作ってます。ただ、他のValidatorクラスで実現してるか確認してはいませんが。

  1. バリデーション、サニテーション、フィルター、全部入り
  2. ルールの適用順番があらかじめ決まっている
  3. 複数に分割している項目も一つとしてバリデーション可能
  4. 配列入力もバリデーション可能

◆もう少し詳しく説明します。

1.全部入りルール

次のような3種類のルールがあると思うのですが、全部に対応しています。
  • サニテーション:
    ヌルバイトアタック、エンコーディングチェック、を行い、
    問題があれば安全な内容で上書きします。
  • フィルター:
    全角→半角、大文字・小文字変換、その逆、など。
  • バリデーション:
    レギュラーエクスプレッションによるフォーマットチェックなど。

2.ルールの順番を決めてある

まぁ大量のルールがある訳です。
が、例えば日本語だと、大文字→小文字変換を行う前には、全角→半角に変換しないと行けません。こういう順番を意識してルールを適用しても問題がないよう、ルールの順番を内部で持ってます。

3.複数分割項目対応

日付など、一つのデータでありながらフォーム上は複数の項目から成り立っている場合があります。例えば

$_POST = array(
 'date_y' => '2011',
 'date_m' => '11',
 'date_d' => '23',
);

find( $_POST, 'name', array( 'multiple' => array(
 'suffix' => array('y','m','d'),
 'sformat' => '$4d/$02d/$02d',
) ) );

4.配列入力のバリデーション

フォームのチェックボックスからだと、入力が配列の場合があります。
入力が配列の場合でも、それぞれの要素ごとにルールを適用してバリデーションします。またエラーがあった場合は、入力と同じ構造でエラーメッセージを返します。

例えば、数値のみの入力を可能にしている場合、
input: $input = array( 0 => '1', 1=>'3', 2=>'x', 3=>'4' );
error: $error = array( 2=>'not a number' );
という構造でエラーメッセージを作ります。

◆ソースコード

まだ開発中。
Cena-DTA内に組み込む予定なので、それから公開します。
githubにおいてあるので、探せば見つかりますが。

0 件のコメント: