NAME
Tripletail::Validator - 値の検証の一括処理
SYNOPSIS
my $validator = $TL->newValidator;
$validator->addFilter(
{
name => 'NotBlank',
email => 'Email',
optionemail => 'Blank;Email', # 入力しなくてもOKとする
password => 'CharLen(4,8);Password',
}
);
my $error = $validator->check($form);
DESCRIPTION
Formオブジェクト値の検証の一括処理を行う。
METHODS
- $TL->newValidator
-
$validator = $TL->newValidator
Tripletail::Validator オブジェクトを作成。
- addFilter
-
$validator->addFilter( { name => 'NotBlank', email => 'Email', optionemail => 'Empty;Email', # 入力しなくてもOKとする password => 'CharLen(4,8);Password', } )
バリデータにフィルタを設定する。 検証対象となるフォームのキーに対し、フィルタリストを指定する。
フィルタ指定形式としては、
FilterName(args)[message]
を、「;」区切りとする。 「(args)」や、「[message]」は省略可能。 「(args)」を省略した場合は、それぞれのフィルタによりデフォルトのチェックを行う。 「[message]」を省略した場合は、checkの戻り時にフィルタ名を返す。
- check
-
$error = $validator->check($form) $error = $validator->check($form, sub{...} )
設定したフィルタを利用して、フォームの値を検証する。
それぞれのフォームのキーに対してエラーがあれば、「[message]」、 もしくは指定がない場合はフィルタ名を値としたハッシュリファレンスを返す。 エラーがなければ、そのキーは含まれない。
2番目の引数に関数リファレンスを渡すと, エラー時にそれが呼ばれる。 エラーがなかった場合には呼ばれない。 引数として、1つめに check メソッドが返すのと同じハッシュを、 2つめに文字列でのエラーメッセージを渡す。
変更用フィルタを使用しようとした場合はエラーを返す。
- correct
-
$error = $validator->correct($form) $error = $validator->correct($form, sub{...} )
設定したフィルタを利用して、フォームの値を検証する。 また、変更用フィルタを使った場合はフォームの値を修正する。
それぞれのフォームのキーに対してエラーがあれば、「[message]」、 もしくは指定がない場合はフィルタ名を値としたハッシュリファレンスを返す。 エラーがなければ、そのキーは含まれない。
2番目の引数に関数リファレンスを渡すと, エラー時にそれが呼ばれる。 エラーがなかった場合には呼ばれない。 引数として、1つめに check メソッドが返すのと同じハッシュを、 2つめに文字列でのエラーメッセージを渡す。
$form に const メソッドが呼ばれた Form オブジェクトが渡された場合、 エラーを返す。
- getKeys
-
@keys = $validator->getKeys
現在設定されているフィルタのキー一覧を返す。
フィルタ一覧
組み込みcheckフィルタ
- Empty
-
値が空(存在しないか0文字)であることをチェックし、そうであれば以降の判定を中止し、検証OKとする。
Email等の形式である必要があるが、入力が任意であるような項目のチェックに使用する。
- NotEmpty
-
値が空(存在しないか0文字)でないことをチェックする。
値の形式を問わないが、入力必須としたい場合に使用する。
- NotWhitespace
-
半角/全角スペース、タブのみでないことをチェックする。 値が空(存在しないか0文字)の場合は検証NGとなる。
- Blank
-
値が空(存在しないか0文字)、半角/全角スペース、タブのみであることをチェックし、そうであれば以降の判定を中止し、検証OKとする。
Email等の形式である必要があるが、入力が任意であるような項目のチェックに使用する。空白のみなら入力無しとみなす。
- NotBlank
-
値が空(存在しないか0文字)、半角/全角スペース、タブのみでないことをチェックする。
値の形式を問わないが、入力必須としたい場合に使用する。空白のみなら入力無しとみなす。
- PrintableAscii
-
文字列が制御コードを除くASCII文字のみで構成されているかチェックする。 値が空(存在しないか0文字)なら検証NGとなる。
- Wide
-
文字列が全角文字のみで構成されているかチェックする。 値が空(存在しないか0文字)なら検証NGとなる。
- Password($spec)
-
文字列が$specに指定した要素をすべて最低1つずつ含んでいるかチェックする。
$specに指定できるのは
alpha
,ALPHA
,digit
,symbol
をカンマ区切りで指定した文字列で、 指定がない場合はすべて指定した場合と同様となる。 また、指定された文字以外が入っていることに関しては考慮しない。値が空(存在しないか0文字)なら検証NGとなる。
- ZipCode
-
7桁の郵便番号(XXX-XXXX形式)かチェックする。
実在する郵便番号かどうかは確認しない。
- TelNumber
-
電話番号(/^\d[\d-]+\d$/)かチェックする。
数字で始まり、数字で終わり、その間が数字とハイフン(-)のみで構成されていれば電話番号とみなす。
-
メールアドレスとして正しい形式かチェックする。
- MobileEmail
-
メールアドレスとして正しい形式かチェックする。
但し携帯電話のメールアドレスでは、アカウント名の末尾にピリオドを含んでいる場合がある為、これも正しい形式であるとみなす。
携帯電話キャリアのドメイン名を判別するわけではないため、通常のメールアドレスも正しい形式であるとみなす。
- Integer($min,$max)
-
整数で、かつ$min以上$max以下かチェックする。指定値は省略可能。
デフォルトでは、最大最小のチェックは行わなず整数であれば正しい形式であるとみなす。
値が空(存在しないか0文字)なら検証NGとなる。
- Real($min,$max)
-
整数もしくは小数で、かつ$min以上$max以下かチェックする。指定値は省略可能。
デフォルトでは、最大最小のチェックは行わなず、整数もしくは小数であれば正しい形式であるとみなす。
値が空(存在しないか0文字)なら検証NGとなる。
- Hira
-
平仮名だけが含まれているかチェックする。
値が空(存在しないか0文字)なら検証NGとなる。
- Kata
-
片仮名だけが含まれているかチェックする。
値が空(存在しないか0文字)なら検証NGとなる。
- ExistentDay
-
YYYY-MM-DDで設定された日付が実在するかチェックする。
- Gif
- Jpeg
- Png
-
それぞれの形式の画像かチェックする。
画像として厳密に正しい形式であるかどうかは確認しない。
- HttpUrl($mode)
-
"http://" で始まる文字列かチェックする。
$modeにs を指定した場合、"https://" で始まる文字列も正しい形式とみなす。
- HttpsUrl
-
"https://" で始まる文字列かチェックする。
- Len($min,$max)
-
バイト数の範囲が指定値以内かチェックする。 指定がない場合はチェックを行わない。
- SjisLen($min,$max)
-
Shift-Jisでのバイト数の範囲が指定値以内かチェックする。指定がない場合はチェックを行わない。
- CharLen($min,$max)
-
文字数の範囲が指定値以内かチェックする。 指定値がない場合はチェックを行わない。
- Portable
-
機種依存文字を含んでいないかチェックする。
値が空(存在しないか0文字)なら検証OKとなる。
- PcPortable
-
携帯絵文字を含んでいないかチェックする。
値が空(存在しないか0文字)なら検証OKとなる。
- DomainName
-
ドメイン名として正当である事を確認する。
- IpAddress
-
IpAddress($checkmask)
$checkmaskに対して、設定されたIPアドレスが一致すれば1。そうでなければundef。
$checkmaskは空白で区切って複数個指定する事が可能。
例:'10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.1 fe80::/10 ::1'。
- Enum($a,$b,$c)
-
値が指定値のいずれかであることをチェックする。指定値がない場合にはいずれにも該当しないとみなす。
- Or($filter1|$filter2|$filter3)
-
指定のフィルタのいずれかに該当するかをチェックする。指定値がない場合にはいずれにも該当しないとみなす。
- RegExp($regexp)
-
指定の正規表現に該当するかをチェックする。指定値がない場合には、エラー。
- SingleValue
-
値がただ1つ存在することをチェックする拒否フィルタ。 (0.44 以降)
1つのみ存在すれば、次のフィルタに処理を渡す。
2つ以上存在する、若しくは1つも存在しない場合には、 その時点で処理を中断し、エラーを返す。
- MultiValues
-
MultiValues($min) MultiValues($min,$max)
値が指定した
$min
個以上,$max
個以下の範囲で 存在することをチェックする拒否フィルタ。 (0.44 以降)個数が範囲内であれば、 次のフィルタに処理を渡す。
個数が範囲外だった場合には、 その時点で処理を中断し、エラーを返す。
$max
を省略した場合、上限個数の確認は行わない。値が0個で、それが範囲内のときのみ(
$min
が 0 の場合)、その場で受理される. (0.45以降) - NoValues
-
値が存在しないことを受け付ける受理フィルタ。 (0.44 以降)
値を全く持っていなければ、 その時点で処理を中断し、成功を返す。
何らかの値が(空欄であったとしても)存在した場合には、 次のフィルタに処理を渡す。
組み込みcorrectフィルタ
"correct" で使用できる変更用フィルタ。 "correct" では check フィルタと correct フィルタの 両方を利用できるが、"check" で correct フィルタを使用した場合には エラーとなる。
- ConvHira
-
ひらがなに変換する。 "convHira" in Tripletail::Value。
- ConvKata
-
カタカナに変換する。 "convKata" in Tripletail::Value。
- ConvNumber
-
半角数字に変換する。 "convNumber" in Tripletail::Value。
- ConvNarrow
-
全角文字を半角に変換する。 "convNarrow" in Tripletail::Value。
- ConvWide
-
半角文字を全角に変換する。 "convWide" in Tripletail::Value。
- ConvKanaNarrow
-
全角カタカナを半角に変換する。 "convKanaNarrow" in Tripletail::Value。
- ConvKanaWide
-
半角カタカナを全角に変換する。 "convKanaWide" in Tripletail::Value。
- ConvComma
-
半角数字を3桁区切りのカンマ表記に変換する。 "convComma" in Tripletail::Value。
- ConvLF
-
改行コードを LF (\n) に変換する。 "convLF" in Tripletail::Value。
- ConvBR
-
改行コードを <BR>\n に変換する。 "convBR" in Tripletail::Value。
- ForceHira
-
ひらがな以外の文字は削除。 "forceHira" in Tripletail::Value。
- ForceKata
-
カタカナ以外の文字は削除。 "forceKata" in Tripletail::Value。
- ForceNumber
-
半角数字以外の文字は削除。 "forceNumber" in Tripletail::Value。
- ForceMin($max,$val)
-
半角数字以外の文字を削除し、min未満なら$valをセットする。$val省略時はundefをセットする。 "forceMin($max,$val)" in Tripletail::Value。
- ForceMax($max,$val)
-
半角数字以外の文字を削除し、maxより大きければ$valをセットする。$val省略時はundefをセットする。 "forceMax($max,$val)" in Tripletail::Value。
- ForceMaxLen($max)
-
最大バイト数を指定。超える場合はそのバイト数までカットする。 "forceMaxLen($max)" in Tripletail::Value。
- ForceMaxUtf8Len($max)
-
UTF-8での最大バイト数を指定。 超える場合はそのバイト数以下まで UTF-8の文字単位でカットする。 "forceMaxUtf8Len($max)" in Tripletail::Value。
- ForceMaxSjisLen($max)
-
SJISでの最大バイト数を指定。超える場合はそのバイト数以下まで SJISの文字単位でカットする。 "forceMaxSjisLen($max)" in Tripletail::Value。
- ForceMaxCharLen($max)
-
最大文字数を指定。超える場合はその文字数以下までカットする。 "forceMaxCharLen($max)" in Tripletail::Value。
- ForcePortable
-
機種依存文字以外を削除。
- ForcePcPortable
-
携帯絵文字以外を削除。
- TrimWhitespace
-
値の前後に付いている半角/全角スペース、タブを削除する。 "trimWhitespace" in Tripletail::Value。
ユーザー定義フィルタについて
組み込みフィルタに含まれないフィルタを、ユーザーで実装し、組み込むことができる。
フィルタの構築
Tripletail::Validator::Filterクラスを継承し、doFilterメソッドをオーバーライドする。
doFilterメソッドに渡される引数は、以下の通り。
doFilterメソッドの戻り値をスカラで評価し、その復帰値が真で且つ リファレンスでなければ検証NGと判断する。 偽であれば、そのフィルタは通過して次のフィルタに。 リファレンスであればそのキーは検証OKとして、そのキーの検証を終了する。
フィルタの組み込み
IniパラメータのValidatorグループに、
フィルタ名 = フィルタクラス名
として指定する。
例
チェック対象となる値の配列に、'Test'以外の文字列が含まれていればエラー。
- TestFilter.pm
-
package TestFilter; use Tripletail; use base qw{Tripletail::Validator::Filter}; sub doFilter { my $this = shift; my $values = shift; my $args = shift; return grep { $_ ne 'Test' } @$values > 0; }
- Iniファイル
-
[Validator] Test = TestFilter
- 使い方
-
$validator->addFilter( { test => 'Test', } )
SEE ALSO
AUTHOR INFORMATION
Copyright 2006 YMIRLINK Inc.
This framework is free software; you can redistribute it and/or modify it under the same terms as Perl itself
このフレームワークはフリーソフトウェアです。あなたは Perl と同じライセンスの 元で再配布及び変更を行うことが出来ます。
Address bug reports and comments to: tl@tripletail.jp
HP : http://tripletail.jp/