はじめに
気分的にFormValidator::Simpleをメモりたくなったのでメモ。
基本的にはCPANサイト見れば事足りる内容です。
アジェンダ
- FormValidator::Simple入れる
- FormValidator::Simpleの基本的な使い方
- バリデーションエラー(Data::FormValidator::Results)の使い方
- VALIDATION COMMANDS(バリデーション文字列)のサンプル
1. FormValidator::Simple入れる
これは書くまでもありませんが一応。。。
$ cpanm FormValidator::Simple
2. FormValidator::Simpleの基本的な使い方
基本の基本
これもCPANサイト見ればまんまですが一応。
checkメソッドの引数に$q(CGIインスタンス)を渡して、パラメータ名に対するバリデーションを記述して行く感じですね。
FormValidator::Simple->check( $q => [ #profile ] );
#profile
のところには、パラメータ名 => [ルール1, ルール2, ...]
といった感じで
決まったルールの文字列があるのでそれを記載して行くことでよしなにバリデーションをしてくれます。
ちょっとしたサンプル
実際に動かしてみる最小サンプルですね。
下記の例のNOT_BLANK
やLENTGH
はVALIDATION COMMANDSと言ってこのあたりに色々乗ってます。
use CGI; use FormValidator::Simple; my $q = CGI->new; $q->param( param1 => 'hoge' ); FormValidator::Simple->check( $q => [ param1 => [ ['NOT_BLANK'], ['LENGTH', 4, 10] ], ] );
この例ではparam1
というパラメータに対して下記のバリデーションを行ってます
NOT_BLANK
: 空白じゃないこと'LENGTH', 4, 10
: 文字列が4文字〜10文字であること
返り値(エラーの場合とか)
FormValidator::Simple->check
の返り値は、
後述するData::FormValidator::Results
オブジェクトが返却されます。
3. バリデーションエラー(Data::FormValidator::Results)の使い方
バリデーションエラーの場合の使い方と書いてますが、
エラーじゃない場合、エラーの場合、それぞれかるーく確認します。
エラーじゃない場合
- FormValidator_Simple_sample01.pl
my $q = CGI->new; $q->param( param1 => 'hoge' ); my $result = FormValidator::Simple->check( $q => [ param1 => [ ['NOT_BLANK'], ['LENGTH', 4, 10] ], ] ); warn $result->has_error;
- 結果
something's wrong
=カラ文字なのでエラーじゃない場合はカラ文字が返却されます
$ FormValidator_Simple_sample01.pl Warning: something's wrong at FormValidator_simple_sample01.pl line 17.
エラーの場合
- FormValidator_Simple_sample02.pl
my $q = CGI->new; $q->param( param1 => '' ); $q->param( param2 => '123451234512345' ); my $result = FormValidator::Simple->check( $q => [ param1 => [ 'NOT_BLANK' ], param2 => [ 'NOT_BLANK', ['LENGTH', 4, 10] ], ] ); print Dumper $result->error; foreach my $param_name ( @{$result->error} ) { print "$param_name: " . Dumper $result->error($param_name); }
- 結果
foreach
で回してるところに注目すると、
$result->error
はエラーのあるパラメータ名の配列リファレンス、
$result->error($param_name);
で引数で指定したパラメータのエラー文字列(VALIDATION COMMANDS名)が返却されてるのが確認できます。
$ FormValidator_Simple_sample01.pl $VAR1 = 'param1'; $VAR2 = 'param2'; param1: $VAR1 = 'NOT_BLANK'; param2: $VAR1 = 'LENGTH';
4. VALIDATION COMMANDS(バリデーション文字列)のサンプル
基本的にはこのへんみたら載ってます。
とはいえ、全部ではないものの軽くここでも触れておきます
INT
: 数値かどうかUINT
: 正の数値かどうかLENGTH
: 文字列長さが妥当か(指定した長さか)EMAIL_LOOSE
: EMAILの形式かDATETIME_STRPTIME
: 指定した日付フォーマット文字列かLESS_THAN
: 指定した数値より少ないかBETWEEN
: 指定した数値の間かANY
: 指定したパラメータのどれかに値が入っているか
ここからの例は全て、バリデーションが通るパラメータとそのチェック方法です。
補足が必要なものについては、エラーになるパターンも載せておきます。
INT
数値かどうか
です。
例では100
にしてますが、文字列の'100'
もバリデーション的にはOKになります。
$q->param( param1 => 100 ); my $result = FormValidator::Simple->check( $q => [ param1 => [ 'INT' ], ] );
UINT
正の数値かどうか
です。説明は特に不要ですね。
$q->param( param1 => 100 ); my $result = FormValidator::Simple->check( $q => [ param1 => [ 'UINT' ], ] );
LENGTH
文字列長さが妥当か(指定した長さか)
ですね。これはちょっと補足します。
[ 'LENGTH', 4 ]と指定
この場合は4文字かどうか
になります。
つまり、4文字以外はエラーになります。
$q->param( param1 => 'abcd' ); my $result = FormValidator::Simple->check( $q => [ param1 => [[ 'LENGTH', 4 ]], ] );
[ 'LENGTH', 4, 8 ]と指定
この場合は4文字以上、8文字以下か
になります。
$q->param( param1 => 'abcdefgh' ); my $result = FormValidator::Simple->check( $q => [ param1 => [[ 'LENGTH', 4, 8 ]], ] );
EMAIL
|EMAIL_LOOSE
これはEMAILの形式か
ですね。
説明は下記も見てみてください
* Email::Valid
* Email::Valid::Loose
$q->param( param1 => 'hogehoge@hoge.co.jp' ); my $result = FormValidator::Simple->check( $q => [ param1 => [ 'EMAIL' ], ] );
DATETIME_STRPTIME
指定した日付フォーマット文字列か
ですね。
説明は下記も見てみてください
* DateTime::Format::Strptime
$q->param( param1 => '2015-04-30 17:00:10' ); my $result = FormValidator::Simple->check( $q => [ param1 => [ ['DATETIME_STRPTIME', '%Y-%m-%d %T'] ], ] );
LESS_THAN
これは指定した数値より少ないか
です。
下記の例の場合、こんなパターンはバリデーションOKな例です。
24
0
'24'
- -1
逆に、25
はバリデーションエラーになります。
my $q = CGI->new; $q->param( param1 => 24 ); my $result = FormValidator::Simple->check( $q => [ param1 => [['LESS_THAN', 25]], ] );
BETWEEN
指定した数値の間か
ですね。
下記の例では20
も25
もOKに含まれます。
また、数値なので'hoge'
はバリデーションエラーになります。
$q->param( param1 => '20' ); my $result = FormValidator::Simple->check( $q => [ param1 => [['BETWEEN', 20, 25]], ] );
ANY
指定したパラメータのどれかに値が入っているか
です。
これは指定方法が他とちょっとわかりずらいですね。
下記の例で言うとsome_data
はパラメター名ではなく、
バリデーション名
といった感じで任意につける名前です。
param1
、param2
、param3
のどれか1つに値が設定されていればバリデーションOKとなり、
逆にどれにも設定されてない場合にバリデーションNGとなります。
$q->param( param1 => 'hoge' ); my $result = FormValidator::Simple->check( $q => [ { some_data => [qw/param1 param2 param3/] } => ['ANY'], ] );
まとめ
perlは便利なCPANモジュールがたくさんあります。
こういうのをたくさん覚えて効率的に開発したいですね\(^o^)/