以前のドキュメントになります。最新版のドキュメントは、こちらです。Validator::CustomはHTMLフォームのデータのバリデーション(値の検証)を行うための便利なモジュールです。バリデーションのルールを少ない記述で書けること、制約ごとにエラーメッセージを設定できること、良く使う機能は最初から提供していて、ユーザー定義の制約を簡単に追加できる柔軟性の高い設計などが特徴です。$vresult->messages;}ルール作成の古い文法はこちら。上記の新しい文法で書くのが推奨です。]];こちらのドキュメントは、新しい文法に書き直しますので、古い文法については、公式のドキュメントを参考にしてください。Validator::CustomのインストールValidator::Customをインストールするにはcpanコマンドを使用します。Validator::CustomWindowsでもUnix系のOSでもインストールすることができます。cpanコマンドではルート権限がないインストールを行うことができませんので、ユーザーのローカル環境にインストールしたい場合はcpanmなどのツールを使用してください。Validator::Customオブジェクトの生成Validator::Customオブジェクトの生成するにはnewメソッドを使用します。Validator::Custom->new;このオブジェクトを使ってバリデーションの処理を行います。バリデーションの基礎バリデーションの基礎について解説します。以下のソースコードを見てください。}データバリデーションを行うデータは、ハッシュリファレンスである必要があります。1200};ルール次にバリデーションのためのルールを作成します。$vc->create_rule;$rule->require('price')->check('int');まず最初にValidator::Custom::Ruleオブジェクトを、create_ruleメソッドを使って、作成します。$vc->create_rule;次に、requireメソッドを使って、存在する必要のあるキーの名前を記述します。$rule->require('price')もしキーが任意のものであるならば、requireの代わりにoptionalを使うこともできます。$rule->optional('price')次に制約を記述します。$rule->require('price')->check('int');今回はひとつのキーのチェックだけですが、複数の値をチェックする場合は、引き続き記述していくことができます。$rule->require('name')->check('string');バリデーションバリデーションを行うには、validateメソッドを使用します。$rule);戻り値は、Validator::Custom::Resultオブジェクトです。結果の確認Validator::Custom::Resultオブジェクトを使って、結果の確認を行うことができます。$vresult->is_ok;is_okメソッドで、バリデーションの結果が正しいかどうかを確認することができます。複数の値のバリデーション複数の値のバリデーションを行うためのルールを作成してみます。$vc->create_rule;$rule->require('price')->check('int');$rule->require('title')->check('ascii');複数の値をバリデーションのするときは、次のように複数回requireを書くだけです。ルールの中身は次のようになります。register_constraintデフォルトで用意されている制約とand条件とor条件を使って、さまざまな制約を表現することができました。Validator::Customではこれに加えて、ユーザー定義の制約を新しく登録することができます。ここでは簡易的に、Emailが正しい形式であるかを確認するための制約を登録してみます。制約を登録するにはregister_constraintメソッドを使用します。});制約の登録の形式は次のようになります。制約のための処理);一度に複数の制約を登録することもできます。制約のための処理2);制約のための処理は、サブルーチンのリファレンスです。データが正しいときは1を、正しくないときは0を返すようにしてください。}}登録した制約は、ルールの中で利用することができます。'foo@my.com'};制約関数を登録するValidator::Customでは、バリデーションのための制約関数を簡単に登録することができます。制約関数を登録するにはregister_constraintメソッドを使用します。});値が正しいものであった場合は1を、値が間違ったものであった場合は0を返却するようにします。注意として、真になる値として、配列のリファレンスを返却してはいけません。配列のリファレンスは制約関数をフィルタとして扱う場合に利用されるからです。このように登録した制約関数はルールの中で使用することができます。$rule->require('tel')->check('tel_num');制約関数は複数同時に登録することもできます。Validator::Customリファレンス項目が存在しても存在しなくてもよい場合はrequireメソッドの代わりにoptionalメソッドを使用します。$vc->create_rule;$rule->optional('name')->check('int');上記のルールはnameが存在しても存在しなくてもよくて、存在する場合はintでなければならないことを表現します。少なくともひとつの項目に値が含まれている複数のテキストボックスを入力して、そのうちの少なくともひとつに値が含まれていることをチェックしたい場合があります。このような場合は少し工夫がいります。テキストボックスの値をマージしてから、それが空でないことをチェックするのがよいでしょう。0.xxに関するドキュメントになります。最新版のドキュメントは、こちらです。バリデーションを行うときに、複数の条件を満たしているかどうかを記述したいことがあります。1000より大きくて2000より小さいという条件を書きたいときなどです。and条件を使ったルールを作成してみます。checkメソッドを複数回呼び出すだけです。ここではgreater_thanとless_thanという制約を使っています。ハッシュリファレンスで制約を指定することで、引数を渡すこともができます。2000});or条件を使ったルールバリデーションを行うときに、あるひとつの条件を満たしているかどうかを記述したいことがあります。空白あるいは整数という条件を記述したい場合があります。or条件を使ったルールを作成してみます。or条件を記述するにはcheck_orメソッドを使用します。'int');and条件とor条件を同時に使うand条件とor条件を同時に使うこともできます。1000});制約での引数の指定デフォルトで用意されている制約には引数を受け取ることができるものがあります。betweenなどです。引数を渡すには制約名の部分をハッシュリファレンスを使って次のように指定します。引数}equal_toとbetweenのサンプルは次のようになります。19};引数には、スカラ値であれば、文字列でも数値でも、配列のリファレンスでも、ハッシュのリファレンスでも渡すことができます。値を配列のリファレンスに変換したい場合はto_arrayフィルタを使用します。['Japanese']to_arrayは配列のリファレンスではないデータを配列のリファレンスに変換します。配列のリファレンスだった場合は何もしません。これはチェックボックスなどで、ひとつの値がくるか、複数の値がくるかがわからない場合に、配列のリファレンスに変換するのに便利です。値が配列の値に含まれたものがどうかをチェックするHTMLフォームのチェックで、値が、ある値以外は許可したくないという場合があると思います。そのような場合はin_array制約関数を使用します。apple/]});in_array制約関数の引数には、許容する値を含んだ配列のリファレンスを指定します。apple/]}チェックボックスなどの複数の値に適用するチェックボックスの値は、複数になりますね。複数の値すべてが、ある値に含まれてほしいという場合は次のように記述します。$rule);eachメソッドを利用することで、要素のそれぞれの値に対して、検証を行うことができます。ややこしいですが、覚えてしまうと便利です。応用たとえば、少なくともひとつがチェックされていて、そのすべての値が001か002というルールは次のようにかけます。002/]});Validator::Customを使うと、HTMLフォームのバリデーションチェックが簡単にかけます。少なくともひとつが選択されているHTMLフォームで、チェックボックスの中で、少なくともひとつが選択されているかを調べたい場合があります。そのようなときはselected_at_least制約関数を使用します。1});selected_at_least制約関数には、引数で少なくともいくつ選択されている必要があるかを指定できます。このサンプルでは、1が指定されているので、少なくともひとつという意味になります。制約関数の中で登録されている制約関数を利用するValidator::Customでバリデーションのための制約関数を書くときに、低レベルな制約関数を利用したいという場合があるかと思います。});制約関数は、第3引数として、Validator::Customオブジェクトがわたってくるというのがポイントです。constraints属性は、制約関数を含むハッシュリファレンスを返却しますので、以下のようにしてすでに登録されている制約関数を利用することができます。非負数の整数HTMLフォームで、非負数の整数のみを許可したい場合があると思います。そのような場合は、uint制約関数を使用します。$rule);内部的には「^[0-9]+$」という正規表現が使われています。メールアドレスが一致していることをチェックHTMLフォームで、パスワードを二つ入力してもらって、パスワードが同じことをチェックしたい場合があります。そのような場合は、duplication制約関数を使用します。->check('duplication');二つの値がどちらも未定義の場合は、バリデーションは失敗することに注意してください。文字列の長さのチェックHTMLフォームで、文字列の長さをチェックしたい場合があると思います。そのような場合は、length制約関数を使用します。5}});長さのチェックができます。文字列が内部文字列の場合は文字列の長さをチェックできます。文字列がバイト文字列の場合は、バイト数をチェックします。定義されている定義されていることを指定するにはdefined制約関数を使用します。$vc->create_rule;$rule->require('name')->check('defined');HTMLフォームの場合は、空文字列かどうかを確認できればよいのでdefineの代わりにnot_blankを使えばよいでしょう。0.xxに関するドキュメントになります。最新版のドキュメントは、こちらです。数値であることを指定するにはdecimal制約関数を使用します。数値というのは正の整数と少数を含みます。負の数は含まないので注意してくだだい。引数で小数点の前にくる最大の桁数と小数点の後にくる最大の桁数を指定できます。空文字列であることを指定するにはblank制約関数を使用します。$vc->create_rule;$rule->require('name')->check('blank');HTMLフォームのバリデーションにおいては、特に使う機会はないと思います。AからBの間の数値AからBの間の数値であることを指定するにはbetween制約関数を使用します。両端のAとBを含むということに注意してください。20]});betweenは整数であるかどうかは考慮しません。整数の制約をかけたい場合はint制約関数もあわせてしようしてください。アスキー図形文字HTMLフォームのパスワードなどアスキーの印字文字(16進数の21~7Eまで)のみを許可したい場合があります。そのような場合はascii制約関数を使用します。$vc->create_rule;$rule->require('password')->check('ascii');ASCIIコードの全体ではなくって、図形文字の範囲なので、タブや空白などが含まれていた場合はバリデーションが失敗します。二つの値が同一であることのチェックふたつの値が一致していることをチェックしたい場合はC制約関数を使用します。どちらか一方の値が未定義だった場合は常にバリデーションは失敗します。->check('duplication');複数の値をチェックする場合は、配列のリファレンスをrequireメソッドに渡すことができます。この場合は、キーの値をnameメソッドをつけてください。パスワードのチェックを実際に行うパスワードのチェックを実際に行う場合は、パスワードが空ではないこと、パスワードがアスキーの図形文字だけで構成されていることのチェックもあわせて行います。ふたつのパスワードが一致しているという制約については、バリデーション後の安全なデータに識別キーに対応する値は必要がないのでcopyオプションに0を指定しておきましょう。ルールは以下のようになります。正規表現にマッチするHTMLフォームで、ある正規表現にマッチすることをチェックしたい場合はregex制約関数を使用します。空白文字ではないHTMLフォームで、空白文字ではないことをチェックしたい場合はnot_space制約関数を使用します。空白文字とは空白文字、タブ文字、改行文字だけで構成されている文字列のことです。文字列が存在しない場合も含まれます。ユニコードにおける空白文字は含まれません。値が定義されていないHTMLフォームで、値が定義されていないことをチェックしたい場合はnot_defined制約関数を使用します。数値がある数より小さいHTMLフォームで、数値がある数より小さいことをチェックしたい場合はless_than制約関数を使用します。整数HTMLフォームで、整数であることをチェックしたい場合はint制約関数を使用します。HTTPあるいはHTTPSのURLHTMLフォームで、HTTPあるいはHTTPSのURLであることをチェックしたい場合はhttp_url制約関数を使用します。ある数より大きいHTMLフォームで、ある数より大きいことをチェックしたい場合はgreater_than制約関数を使用します。数値が等しいHTMLフォームで、数値が等しいことをチェックしたい場合はequal_to制約関数を使用します。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebスタートアップも。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。このサイトはGiblogで製作されています。