NAME
FormValidator::LazyWay - フォーム検証用モジュール
SYNOPSIS
use strict;
use warnings;
use Data::Dumper;
use CGI;
use FormValidator::LazyWay;
my $config = {
'setting' => {
'strict' => {
'email' => { 'rule' => [ 'Email#email' ] },
'password' => {
'rule' => [
{ 'String#length' => {
'min' => '4',
'max' => '12'
}
},
'String#ascii'
]
}
}
},
'lang' => 'ja',
'labels' => {
'ja' => {
'email' => 'メールアドレス',
'password' => 'パスワード'
}
},
'rules' => [ 'Email', 'String' ]
};
my $fv = FormValidator::LazyWay->new(config => $config);
my $cgi = new CGI( { password => 'e' } );
my $res = $fv->check( $cgi, { required => [qw/email password/], } );
if ( $res->has_error ) {
print Dumper $res->error_message;
# output
#$VAR1 = {
# 'email' => 'メールアドレス�空白��。',
# 'password' => 'パスワードã�«ã�¯4æ–‡å—以上12æ–‡å—以下ã�Œä½¿ç”¨ã�§ã��ã�¾ã�™ã€‚'
#};
}
else {
# OK!
print Dumper $res->valid;
}
DESCRIPTION
ã�“ã�®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã�¯ã�¾ã� 開発段階ã�§ã�™ã�®ã�§ã€�仕様ã�Œå¤‰æ›´ã�•ã‚Œã‚‹æ��ã‚Œã�Œã�‚ã‚Šã�¾ã�™ã€‚
フォーム検証用モジュールFormValidator::LazyWayã�¯å�„フォームã�”ã�¨ã�§ã�¯ã�ªã��ã€�アプリケーション全体ã�§ä½¿ç”¨ã�™ã‚‹ç›®çš„ã�§ä½œæˆ�ã�—ã�¦ã�Šã‚Šã�¾ã�™ã€‚ フォームã�”ã�¨ã�«æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã‚’è¨å®šã�™ã‚‹ã�®ã�§ã�¯ã�ªã��ã€�フィールドå��ã�”ã�¨ã�«æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã‚’è¨å®šã�™ã‚‹ã�“ã�¨ã�«ã‚ˆã‚Šã€�よりDRYã�ªã‚³ãƒ¼ãƒ‰ã‚’書ã��ã�“ã�¨ã�®ã�Šæ‰‹ä¼�ã�„ã‚’ã�—ã�¾ã�™ã€‚
ã�¾ã�Ÿã€�検証用モジュールã�”ã�¨ã�«ã€�検証内容をè¨å®šã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ã��ã�®æƒ…å ±ã‚’å…ƒã�«ã€�エラーメッセージを作æˆ�ã�™ã‚‹ã�®ã�§ã€� エラーメッセージを考ã�ˆã‚‹æ‰‹é–“ã‚‚çŸç¸®ã�§ã��るよã�†ã�«ã�ªã�£ã�¦ã�„ã�¾ã�™ã€‚
QUICK START
簡�������フォームを例を基��使�方�説明を�����。
コンフィグè¨å®š
今回ã�¯YAMLã�§è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’作æˆ�ã�—ã�¦ã�„ã�¾ã�™ã€‚ 使用ã�™ã‚‹ã�®ã�¯ã€�ã�“ã�®ãƒ‡ãƒ¼ã‚¿ã‚’ãƒ�ッシュã�«ã�—ã�Ÿãƒ‡ãƒ¼ã‚¿ã�§ã�™ã�®ã�§ã€�ã�‚ã�ªã�Ÿã�®å¥½ã��ã�ªæ–¹æ³•ã‚’ã�”利用下ã�•ã�„。
rules�指定�れ��る���使用�る検証用モジュール���。 詳細� FormValidator::LazyWay::Rule::Email FormValidator::LazyWay::Rule::String を�確�下��。
rules :
- Email
- String
lang : ja
setting :
strict :
email :
rule :
- Email#email
message :
rule :
- String#length :
min : 1
max : 500
user_key :
rule :
- String#length :
min : 4
max : 12
- String#ascii
labels :
ja :
email : メールアドレス
message : ������内容
user_key : ユーザID
準備
è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã�‹ã‚‰å�–り出ã�—ã�Ÿãƒ‡ãƒ¼ã‚¿ã‚’ã€�newã�®å¼•æ•°ã�¨ã�—ã�¦æ¸¡ã�™ã� ã�‘ã�§ã�™ã€‚ã�“ã‚Œã�§æº–備完了ã�§ã�™ã€‚
use FormValidator::LazyWay;
use YAML::Syck;
use FindBin;
use File::Spec;
my $conf_file = File::Spec->catfile( $FindBin::Bin, 'conf/inquery-sample.yml' );
my $config = LoadFile($conf_file);
my $fv = FormValidator::LazyWay->new( config => $config );
検証フィールドã�®è¨å®š
検証フィールドã�®è¨å®šã‚’ã�Šã�“ã�ªã�„ã�¾ã�™ã€‚ã��ã�®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã�Œå¿…é ˆã�®å ´å�ˆã�¯ã€�required , ã�‚ã�£ã�¦ã‚‚ã�ªã��ã�¦ã‚‚良ã�„å ´å�ˆã�¯ã€�optionalã�«è¨å®šã�—ã�¾ã�™ã€‚
my $cgi = new CGI() ;
my $res = $fv->check( $cgi , {
required => [qw/email message/],
optional => [qw/user_key/],
});
# 検証ã�Œã‚¨ãƒ©ãƒ¼ã� ã�£ã�Ÿå ´å�ˆ
if( $res->has_error ) {
warn Dumper $res->error_message;
}
else {
# 検証ã�Œã�†ã�¾ã��ã�„ã�£ã�Ÿå ´å�ˆ
warn Dumper $res->valid;
}
実行�果
- æ£å¸¸ã�ªãƒ‡ãƒ¼ã‚¿ã�§è©¦ã�—ã�Ÿéš›
-
my $cgi = new CGI( { email => 'tomohiro.teranishi@gmail.com' , use_key => 'tomyhero' , message => '�����ん' } ) ;
$res->valid ã�®ä¸èº«ã�Œdumpã�•ã‚Œã�¾ã�™ã€‚
$VAR1 = { 'email' => 'tomohiro.teranishi@gmail.com', 'message' => '�����ん' };
- å¿…è¦�ã�ªãƒ‡ãƒ¼ã‚¿ã�Œè¶³ã‚‰ã�ªã�„å ´å�ˆ
-
my $cgi = new CGI( { message => '�����ん' } ) ;
$res->error_message ã�«ã�¯ä»¥ä¸‹ã�®ãƒ‡ãƒ¼ã‚¿ã�Œæ ¼ç´�ã�•ã‚Œã�¾ã�™ã€‚
$VAR1 = { 'email' => 'メールアドレス�空白��。' };
- フォーマットã�Œé–“é�•ã�£ã�¦ã‚‹å ´å�ˆ
-
my $cgi = new CGI( { email => 'email' , use_key => 'tom' , message => '�����よ�' } ) ;
$res->error_message ã�«ã�¯ä»¥ä¸‹ã�®ãƒ‡ãƒ¼ã‚¿ã�Œæ ¼ç´�ã�•ã‚Œã�¾ã�™ã€‚
$VAR1 = { 'email' => 'メールアドレス��メールアドレス�書��使用����。' };
è¨å®šã�®èª¬æ˜Ž
rules
使用ã�™ã‚‹è¨å®šã�®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’指定ã�—ã�¾ã�™ã€‚指定ã�—ã�¦ã�„ã�ªã�„ã€�検証ルールを実行ã�—よã�†ã�¨ã�™ã‚‹ã�¨ã‚¨ãƒ©ãƒ¼ã�«ã�ªã‚‹ã�®ã�§ã€�ã�”注æ„�ã��ã� ã�•ã�„。
指定ã�®éš›ã�«ã�¯ã€�FormValidator::LazyWay::Rule:: ã�®éƒ¨åˆ†ã�¯çœ�ç•¥ã�§ã��ã�¾ã�™ã€‚ ã�¾ã�Ÿã€�独自ã�§ä½œæˆ�ã�—ã�Ÿæ¤œè¨¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã�®å ´å�ˆã�¯ã€�é ã�«+ã‚’ã�¤ã�‘ã‚‹ã�“ã�¨ã�§ã€�指定ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
rules :
- String
- +OreOre::Rule
lang
デフォルトã�§ä½¿ç”¨ã�™ã‚‹è¨€èªžã‚’è¨å®šã�—ã�¾ã�™ã€‚値ã�®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã�¯enã�§ã�™ã€‚
lang : ja
langs
使用ã�™ã‚‹è¨€èªžã‚’ã�™ã�¹ã�¦æŒ‡å®šã�—ã�¾ã�™ã€‚複数ã�®è¨€èªžã‚’使用ã�™ã‚‹ã‚µã‚¤ãƒˆã�®éš›ã�«è¨å®šã�—ã�¾ã�™ã€‚ 複数ã�®è¨€èªžã‚’使用ã�—ã�ªã�„å ´å�ˆã�¯ã€�è¨å®šã�™ã‚‹å¿…è¦�ã�¯ã�‚ã‚Šã�¾ã�›ã‚“。
langs :
- ja
- en
setting
検証ルール��を�フィールド��マッピング����。 以下�よ���フォーマット��り��。
レベル :
フィールド� :
è¨å®šå�� :
è¨å®šå��ã�”ã�¨ã�«å®šç¾©ã�•ã‚Œã�Ÿè¨å®š
- レベル
-
å�Œã�˜ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å��ã�§ã€�é�•ã�†æ¤œè¨¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’指定ã�§ã��るよã�†ã�«ã€�レベルã�¨ã�„ã�†ä»•çµ„ã�¿ã�Œã�‚ã‚Šã�¾ã�™ã€‚ 何もè¨å®šã�—ã�ªã�‘ã‚Œã�°ã€�strict ã�¨ã�„ã�†æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã�Œèªã�¿è¾¼ã�¾ã‚Œã�¾ã�™ã€‚
例ã�ˆã�°emailã�¨ã�„ã�†ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã�Œã�‚ã�£ã�Ÿå ´å�ˆã�«ã€�登録時ã�®ãƒ•ã‚©ãƒ¼ãƒ ã�§ã�¯strictレベルã�®æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã‚’ã€� 検索時ã�«ã�¯looseレベルã�®æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã‚’使用ã�—ã�Ÿã�„å ´å�ˆã�ªã�©ã€�ã��ã�†ã�—ã�Ÿéš›ã�«ä½¿ç”¨ã�™ã‚‹ã�“ã�¨ã�«ã�ªã‚Šã�¾ã�™ã€‚
setting : stcit : email : rule : - Email#email loose : email : rule : - Email#much_alias
登録フォーム���strict ���指定を�る必���実行����。
my $res = $fv->check( $cgi , { required => [qw/email/] } );
検索フォームã�§ã�¯ã€�loose を使用ã�™ã‚‹ã�®ã�§ã€�level ã�®è¨å®šã‚’使ã�£ã�¦ä½¿ç”¨ã�—ã�¾ã�™ã€‚
my $res = $fv->check( $cgi , { required => [qw/email/] , level => { email => 'loose' } } );
ã�¾ã�Ÿã€�特別ã�«ã‚¹ãƒšã‚·ãƒ£ãƒ«ãƒ¬ãƒ™ãƒ«ã�ŒäºŒã�¤ã�‚ã‚Šã�¾ã�™ã€‚ 一ã�¤ã‚�ã�¯ regex_map ã�¨ã�„ã�†ã‚¹ãƒšã‚·ãƒ£ãƒ«ãƒ¬ãƒ™ãƒ«ã�§ã�™ã€‚ ã�“ã�®ãƒ¬ãƒ™ãƒ«ã‚’使用ã�™ã‚‹ã�¨ã€�æ£è¦�表ç�¾ã‚’フィールドå��ã�«ä½¿ç”¨ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
setting : regexp_map : '_id$' : rule : - Number#integer strict : foo_id : rule : - Email#email
ã�“ã�®ã‚ˆã�†ã�«ã‚»ãƒƒãƒˆã�™ã‚‹ã�“ã�¨ã�«ã‚ˆã‚Šã€�_idã�§çµ‚ã‚�ã‚‹ã�™ã�¹ã�¦ã�®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã�¯ã€�Number#integerã�®æ¤œè¨¼ãƒ«ãƒ¼ãƒ«ã�Œé�©å¿œã�•ã‚Œã�¾ã�™ã€‚ ã�Ÿã� ã�—ã€�ä»–ã�®ãƒ¬ãƒ™ãƒ«ã�®è¨å®šã�®æ–¹ã�Œå¼·ã�„仕様ã�«ã�ªã�£ã�¦ã�Šã‚Šã€�strict ã�§ foo_idã‚’è¨å®šã�—ã�Ÿå ´å�ˆã€�ã��ã�¡ã‚‰å�´ã‚’優先的ã�«å��æ˜ ã�•ã�›ã�¾ã�™ã€‚
二ã�¤ã‚�ã�¯ merge ã�¨ã�„ã�†ã‚¹ãƒšã‚·ãƒ£ãƒ«ãƒ¬ãƒ™ãƒ«ã�§ã�™ã€‚ ã�“ã�®ãƒ¬ãƒ™ãƒ«ã‚’使用ã�™ã‚‹ã�¨ã€�複数ã�®é …目をマージã�—ã�Ÿçµ�果を検証ã�«ä½¿ç”¨ã�™ã‚‹ã�“ã�¨ã�Œå‡ºæ�¥ã‚‹ã‚ˆã�†ã�«ã�ªã‚Šã�¾ã�™ã€‚
merge: date: format: "%04d-%02d-%02d" fields: - year - month - day strict: date: rule: - Object#regexp: format: ^\d{4}-\d{2}-\d{2}
ã�“ã�®ã‚ˆã�†ã�«ã‚»ãƒƒãƒˆã�™ã‚‹ã�“ã�¨ã�«ã‚ˆã‚Šã€�year, month, day ã‚’ format ã�«å¾“ã�£ã�¦å…¥ 力内容をマージã�—ã�¦ date ã�¨è¨€ã�†é …目を作りã�¾ã�™ã€‚ ã�“ã�® date ã�¨ã�„ã�†é …ç›®ã�«ã�¯ã��ã�®ä»–ã�®é€šå¸¸ã�®é …ç›®ã�¨å�Œã�˜ã‚ˆã�†ã�«æ¤œè¨¼ã�™ã‚‹ã�“ã�¨ã�Œå‡º æ�¥ã�¾ã�™ã€‚
- フィールド�
-
フィールド�を指定���。
- è¨å®šå��
-
ç�¾åœ¨ rule ã�¨ã�„ã�†è¨å®šå��ã�Œã�‚ã‚Šã€�ã�“ã�®é…�下ã�«ã�¯ã€�検証用モジュールã�®è¨å®šã‚’書ã��ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ filter , merge , fix ã�¨ã�„ã�†è¨å®šå��ã�®è¿½åŠ を今後ã�«äºˆå®šã�—ã�¦ã�„ã�¾ã�™ã€‚
- rule
-
フィールドã�¨ã€�検証用モジュールã�®ãƒžãƒƒãƒ”ングをã�™ã‚‹è¨å®šã�§ã�™ã€‚以下ã�®ã‚ˆã�†ã�«ã€�é…�列ã�§ã€�検証用モジュールを複数指定ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ ã�¾ã�Ÿã€�検証用モジュールã�¯ã€�引数をè¨å®šã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ 検証用モジュールå��ã�¯ã€�rules ã�§æŒ‡å®šã�—ã�ŸãƒŠãƒžã‚¨ã�¨ã€�関数å��ã‚’ # ã�§ã�¤ã�ªã��ã�“ã�¨ã�«ã‚ˆã‚Šè¨å®šã�§ã��ã�¾ã�™ã€‚
rule : - String#length : min : 4 max : 12 - String#ascii - +OreOre#rule
labels
フィールドå��ã�®è¡¨ç¤ºå��ã‚’è¨å®šã�—ã�¾ã�™ã€‚
labels :
email : メールアドレス
user_name : ユーザ�
user_id : ユーザーID
messages
検証モジュール自身ã�«è¨å®šã�•ã‚Œã�¦ã�„ã‚‹ã€�メッセージã�«å†…容を上書ã��ã�™ã‚‹ã�®ã�«ä½¿ç”¨ã�§ã��ã�¾ã�™ã€‚ 特ã�«å•�é¡Œã�ªã�„å ´å�ˆã�¯ã€�使用ã�™ã‚‹å¿…è¦�ã�¯ã�‚ã‚Šã�¾ã�›ã‚“。言語ã�”ã�¨ã�«æŒ‡å®šã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã€� rule_messageã�§ã€�å¤§æž ã�®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€� rule ã�§ã€�å�„検証モジュールã�®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’上書ã��ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
messages :
ja :
rule_message : __field__��__rule__�使用����。
rule :
Email#email : メイルアドレス
String#length : $_[min]æ–‡å—以上ã�§ã€�$_[max]æ–‡å—以下
Profile
check()メソッド�二�目�引数�入るデータを�profile�呼���。
required
å¿…é ˆé …ç›®ã‚’æŒ‡å®šã�—ã�¾ã�™ã€‚ã�“ã�“ã�§æŒ‡å®šã�•ã‚Œã�Ÿãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å��ã�Œå˜åœ¨ã�—ã�ªã�„å ´å�ˆã€�missingエラーã�«ã�ªã‚Šã�¾ã�™ã€‚
my $profile
= {
required => [qw/email name/],
}
optional
å¿…é ˆã�§ã�¯ã�ªã��ã€�ã�‚ã�£ã�¦ã‚‚ã�ªã��ã�¦ã‚‚良ã�„フィールドå��を指定ã�—ã�¾ã�™ã€‚
my $profile
= {
optional => [qw/zip/],
}
defaults
フィールドå��ã�Œç©ºç™½ã� ã�£ã�Ÿå ´å�ˆã€�デフォルト値をè¨å®šã�„ã�Ÿã�—ã�¾ã�™ã€‚requiredã�®ãƒ�ェックより先ã�«ã€� デフォルト値をè¨å®šã�—ã�¾ã�™ã�®ã�§ã€�defaultsã‚’è¨å®šã�—ã�Ÿå ´å�ˆã€�入力ã�Œã�ªã��ã�¦ã‚‚ã€�å¿…é ˆæ�¡ä»¶ã‚’満ã�Ÿã�™ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
my $profile
= {
required => [qw/email name/],
defaults => {
email => 'tomohiro.teranishi@gmail.com',
name => 'Tomohiro',
},
}
want_array
一ã�¤ã�®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã�«å¯¾ã�—ã�¦ã€�複数ã�®å€¤ã�Œé€�られã�¦ã��ã�Ÿå ´å�ˆã€�1ã�¤ç›®ä»¥å¤–を無視ã�™ã‚‹ã�®ã�§ã�™ã�Œã€�ã�“ã�®è¨å®šã‚’ã�—ã�Ÿå ´å�ˆã€� 複数ã�®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã�®å€¤ã‚’å�–å¾—ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ã�¾ã�Ÿã€�é…�列ã�®å�‚ç…§ã�¨ã�—ã�¦å�–å¾—ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
my $profile
= {
required => [qw/email name/],
optional => [qw/hobby/],
want_array => [qw/hobby/],
}
lang
言語è¨å®šã‚’指定ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ã�“ã�“ã�§æŒ‡å®šã�™ã‚‹è¨€èªžã�¯ã€�è¨å®šã�®langsã�§æŒ‡å®šã�•ã‚Œã�¦ã�„ã‚‹å¿…è¦�ã�Œã�‚ã‚Šã�¾ã�™ã€‚
my $profile
= {
required => [qw/email name/],
lang => 'ja',
}
level
検証レベルを変更ã�—ã�Ÿã�„å ´å�ˆã�«ä½¿ç”¨ã�—ã�¾ã�™ã€‚レベルã�¨ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å��ã�¨ã�®ãƒžãƒƒãƒ”ングã�¯ã€�è¨å®šã�«ã�¦å®šç¾©ã�—ã�¦ã�„ã‚‹å¿…è¦�ã�Œã�‚ã‚Šã�¾ã�™ã€‚
my $profile
= {
required => [qw/email name/],
level => {
email => 'loose',
name => 'special',
}
}
�果
FormValidator::LazyWay::Resultオブジェクトを戻り値ã�¨ã�—ã�¦å�–å¾—ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚ã��ã�¡ã‚‰ã‚’å�‚ç…§ã�—ã�¦ã��ã� ã�•ã�„。
AUTHOR
Tomohiro Teranishi <tomohiro.teranishi@gmail.com>
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 3:
Non-ASCII character seen before =encoding in 'フォーム検証用モジュール'. Assuming CP1252