tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】FormValidator::Simpleの使い方メモ - VALIDATION COMMANDSのサンプルとかも

はじめに

気分的にFormValidator::Simpleをメモりたくなったのでメモ。
基本的にはCPANサイト見れば事足りる内容です。

アジェンダ

  1. FormValidator::Simple入れる
  2. FormValidator::Simpleの基本的な使い方
  3. バリデーションエラー(Data::FormValidator::Results)の使い方
  4. VALIDATION COMMANDS(バリデーション文字列)のサンプル

1. FormValidator::Simple入れる

これは書くまでもありませんが一応。。。

$ cpanm FormValidator::Simple

2. FormValidator::Simpleの基本的な使い方

基本の基本

これもCPANサイト見ればまんまですが一応。
checkメソッドの引数に$q(CGIインスタンス)を渡して、パラメータ名に対するバリデーションを記述して行く感じですね。

FormValidator::Simple->check( $q => [
  #profile
] );

#profileのところには、パラメータ名 => [ルール1, ルール2, ...]といった感じで
決まったルールの文字列があるのでそれを記載して行くことでよしなにバリデーションをしてくれます。

ちょっとしたサンプル

実際に動かしてみる最小サンプルですね。
下記の例のNOT_BLANKLENTGHは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|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

指定した数値の間かですね。
下記の例では2025もOKに含まれます。
また、数値なので'hoge'はバリデーションエラーになります。

$q->param( param1 => '20' );

my $result = FormValidator::Simple->check( $q => [
    param1 => [['BETWEEN', 20, 25]],
] );
ANY

指定したパラメータのどれかに値が入っているかです。
これは指定方法が他とちょっとわかりずらいですね。

下記の例で言うとsome_dataはパラメター名ではなく、
バリデーション名といった感じで任意につける名前です。

param1param2param3のどれか1つに値が設定されていればバリデーションOKとなり、 逆にどれにも設定されてない場合にバリデーションNGとなります。

$q->param( param1 => 'hoge' );

my $result = FormValidator::Simple->check( $q => [
    { some_data => [qw/param1 param2 param3/] } => ['ANY'],
] );

まとめ

perlは便利なCPANモジュールがたくさんあります。
こういうのをたくさん覚えて効率的に開発したいですね\(^o^)/