バリデーション ライブラリ
Ziu 付属のバリデーションライブラリです。データベースへ渡す値などのデータ検証を行う機能を提供します。
設定
バリデーションライブラリを利用するための設定を行ないます。
単体で利用の設定方法
本バリデーションライブラリは、単体で使用することができます。
// member テーブル向けにバリデーションを初期化
$vd = new Validate($config);
$vd->init('member');
Ziu で利用の設定方法
Ziu での利用では、モデルクラスに validate() メソッドを定義して、そのメソッド内で主に利用します。
public function validate(array $data, &$valid, &$error, $id = FALSE)
{
// member テーブル向けにバリデーションを初期化
$vd = lib('validate', $config)->init('member');
...
}
初期設定と初期化
初期設定は3つの方法で行うことができます。
-
コンストラクタで初期設定
例)
new Validate($config)又はlib('validate', $config) -
init() メソッドで初期設定
例)
$vd->init('member', $config) - config() メソッドで初期設定
例)
$vd->config($config)
設定項目 - 初期設定メソッド「config()」
| 項目 | 型 | 初期値 | 説明 |
|---|---|---|---|
| get_errors_type | string | string | get_errors()メソッドの取得形式を指定(stringとarrayが利用可能) |
| subdir | string | core/lib/validate | メッセージ言語ファイルの配置ディレクトリを指定 |
| lang | string | ja | メッセージ言語(デフォルトで'ja'のみ用意) |
| separator | string | , | ルール引数値のセパレータ |
| regex | array | 注) 正規表現を参照 | 各バリデーションの正規表現 |
lang に ja 以外を指定する場合は、バリデーションライブラリフォルダ配下にメッセージ言語を別途拡張する必要があります。
ja のメッセージ言語ファイル : validate/state_ja.jp
設定項目 - 初期化メソッド「init()」
| 項目 | 型 | 初期値 | 説明 |
|---|---|---|---|
| $action | string | default | バリデーション名 (主にテーブル名を利用) |
| $config | array | 注) 初期設定メソッド参照 | 初期設定リスト |
正規表現
バリデーションで利用している正規表現を定義することができます。
日本語系入力値バリデーションの hiragana、fullkana、halfkana、kanji においては文字コードが UTF-8 のみに対応しています。
- trim - トリム
初期値 :/^(\x20|\xe3\x80\x80).*|.*(\x20|\xe3\x80\x80)$/ - alpha - アルファベット
初期値 :/^([a-z])+$/i - alnum - アルファベット・数値
初期値 :/^([a-z0-9])+$/i - aldash - アルファベット・ダッシュ
初期値 :/^([-a-z0-9_-])+$/i - base64 - Base64
初期値 :/[^a-zA-Z0-9\/\+=]/ - email - メールアドレス
初期値 :/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix - domain - ドメイン
初期値 :/^([a-z0-9\-]+\.)+[a-z]{2,6}$/ix - url - URL
初期値 :/^(https?|ftp):\/\/[-_\.!~*\'()a-z0-9;\/?:\@&=+\$,%#]+$/i - ktaimail - 携帯メールアドレスドメイン
初期値 :/(@|\.)(docomo\.ne\.jp|ezweb\.ne\.jp|softbank\.ne\.jp|vodafone\.ne\.jp|willcom\.com|pdx\.ne\.jp|disney\.ne\.jp)$/ - zip - 郵便番号
初期値 :/^[0-9]{3}\-?[0-9]{4}$/ - tel - 電話番号
初期値 :/^([0-9]{2,})\-?([0-9]{2,})\-?([0-9]{4,})$/ - numeric - 数値
初期値 :/^[\-+]?[0-9]*\.?[0-9]+$/ - integer - Integer値
初期値 :/^[\-+]?[0-9]+$/ - decimal - 10進数
初期値 :/^[\-+]?[0-9]+\.[0-9]+$/ - natural - 自然数
初期値 :/^[0-9]+$/ - hiragana['euc-jp'] - ひらがな EUC-JP (利用不可)
初期値 :/^(?:\xa4[\xa1-\xf3]|\xa1[\xb5\xb6\xab])+$/ - hiragana['shift_jis'] - ひらがな Shift_JIS (利用不可)
初期値 :/^(?:\x82[\x9f-\xf1]|\x81[\x4a\x54\x55])+$/ - hiragana['utf-8'] - ひらがな UTF-8
初期値 :/^(?:\xe3\x81[\x81-\xbf]|\xe3\x82[\x80-\x96]|\xe3\x82[\x99-\x9f]|\xe3\x83[\xbb-\xbc])+$/ - fullkana['euc-jp'] - 全角カナ EUC-JP (利用不可)
初期値 :/^(?:\xa5[\xa1-\xf6]|\xa1[\xb3\xb4\xbc])+$/ - fullkana['shift_jis'] - 全角カナ Shift_JIS (利用不可)
初期値 :/^(?:\x83[\x40-\x96]|\x81[\x52\x53\x5b])+$/ - fullkana['utf-8'] - 全角カナ UTF-8
初期値 :/^(?:\xe3\x82[\xa1-\xbf]|\xe3\x83[\x80-\xbf]|\xe3\x87[\xb0-\xbf])+$/ - halfkana['euc-jp'] - 半角カナ EUC-JP (利用不可)
初期値 :/^(?:\x8e[\xa6-\xdf])+$/ - halfkana['shift_jis'] - 半角カナ Shift_JIS (利用不可)
初期値 :/^(?:\xa6-\xdf)+$/ - halfkana['utf-8'] - 半角カナ UTF-8
初期値 :/^(?:\xef\xbd[\xa5-\xbf]|\xef\xbe[\x80-\x9f])+$/ - kanji['euc-jp'] - 漢字 EUC-JP (利用不可)
初期値 :/^(?:[\xb0-\xf4][\xa1-\xfe]|[\xf9-\xfc][\xa1-\xfe]|\x8f[\xb0-\xf4][\xa1-\xfe])+$/ - kanji['shift_jis'] - 漢字 Shift_JIS (利用不可)
初期値 :/^(?:[\x88-\x9f][\x40-\xfc]|[\xe0-\xfb][\x40-\xfc]|\xfc[\xa2-\xee])+$/ - kanji['utf-8'] - 漢字 UTF-8
初期値 :/^(?:\xe4[\xb8-\xbf][\x80-\xbf]|[\xe5-\xe8][\x80-\xbf][\x80-\xbf]|\xe9[\x80-\xbe][\x80-\xbf]|\xe9\xbf[\x80-\x83]|\xef[\xa4-\xa8][\x80-\xbf]|\xef\xa9[\x80-\xaa])+$/
使い方
バリデーションの基本指定
ライブラリの初期化から $data 配列に対してバリデーション判定までの流れになります。
$vd = lib('validate')->init('news')
->field('title', 'タイトル')->rule('required')->rule('maxlen', 15)
; // end of $vd
if (($res = $vd->execute($data)) === FALSE) {
$error = $vd->get_errors('[:label] :state');
} else {
$valid = $vd->valid();
}
return $res;
ルールの指定
field() メソッドに対して rule() メソッドのチェーンメソッド形式でルール指定することができます。
$vd = lib('validate')->init('news')
->field('title', 'タイトル')->rule('required')->rule('maxlen', 15)
->field('news_date', '日付')->rule('required')->rule('date')
->field('public_flg', '公開フラグ')->rule('required')
; // end of $vd
フィールドとルールの同時指定
field() メソッドの第3引数を利用してフィールドに対するルールを指定することができます。
$vd = lib('validate')->init('news');
$vd->field('title', 'タイトル', 'required|maxlen[15]');
$vd->field('news_date', '日付', 'required|date');
$vd->field('public_flg', '公開フラグ', 'required');
バリデーションの実行
execute() メソッドでフィールド/ルールに対してバリデーションを実行します。
戻り値(boolean)にて、ルールの合否判定を行ないます。
$res = $vd->execute($data) ? 'OK' : 'NG';
エラーの取得
バリデーションエラーが発生した場合にエラーメッセージを取得することができます。
// 全てのエラーメッセージを取得
$error = $vd->get_errors('[:label] :state');
// フィールドのエラーメッセージを取得
$error = $vd->get_error('title', '[:label] :state');
有効性データの取得
バリデーションチェックを通過した有効性データを取得することができます。
(注意) field() メソッドでバリデーション指定していないデータは有効性データに含まれません。
$valid = $vd->valid();
カスタムバリデーションルールの指定
add() メソッドでカスタムバリデーションのルールをバインドすることができます。
メソッドは public function _valid_(ルール名) で定義する必要があります。
// カスタムバリデーションクラスを定義
class My_Validation
{
public function _valid_include($val, $str)
{
Validate::message('include', '値(:value)に文字[' . $str . ']が含まれいません。');
return strpos($val, $str) !== FALSE;
}
}
// add() メソッドでライブラリにバインド
$vd = lib('validate')->init('news')->add(new My_Validation)
->field('title', 'タイトル')->rule('include', '。')
; // end of $vd
ルール
バリデーションライブラリには、多くのルールが標準で用意されています。
文字列系入力値バリデーション
| 項目 | パラメータ | 説明 |
|---|---|---|
| throw | なし | 値チェックを一切行わず、そのまま通過(チェックOKと)します。 |
| trim | なし | 半角スペース(x20)、全角スペース(xE38080)のトリムを行います。 |
| required | なし | NULL、FALSE、空文字、空配列 以外の入力値を必須とします。 |
| value | $compare, $strict = 0 | $compare と同じ値かチェックします。$strict が1の場合、型判定を行います。 |
| match | $pattern | $pattern で指定した正規表現にマッチするかチェックします。 |
| minlen | $length | $length で指定した文字数以上かチェックします。 |
| maxlen | $length | $length で指定した文字数以下かチェックします。 |
| length | $length | $length で指定した文字数と一致するかチェックします。 |
| alpha | なし | 半角英字かチェックします。 |
| alnum | なし | 半角英数字かチェックします。 |
| aldash | なし | 半角英数字と半角ハイフン、半角アンダースコアかチェックします。 |
| base64 | なし | BASE64による文字列かチェックします。 |
インターネット/コミュニケーション系入力値バリデーション
| 項目 | パラメータ | 説明 |
|---|---|---|
| なし | メールアドレスフォーマットであるかチェックします。 | |
| emails | $separator = "\t" | セパレータで渡した複数の値に対してメールアドレスフォーマットであるかチェックします。 |
| ip | なし | IPアドレスフォーマットであるかチェックします。 |
| domain | なし | ドメインフォーマットであるかチェックします。 |
| url | なし | URLフォーマットであるかチェックします。 |
| ktaimail | なし | 携帯メールアドレスフォーマットであるかチェックします。※日本のみ |
| zip | なし | 郵便番号フォーマットであるかチェックします。 |
| tel | なし | 電話番号フォーマットであるかチェックします。 |
数字系入力値バリデーション
| 項目 | パラメータ | 説明 |
|---|---|---|
| minnum | $min | $min 以上であるかチェックします。 |
| maxnum | $max | $max 以下であるかチェックします。 |
| numeric | なし | 数値フォーマット(浮動小数点あり/なし)であるかチェックします。 |
| isnum | なし | is_numeric() が真であるかチェックします。 |
| integer | なし | 数値フォーマット(浮動小数点なし)であるかチェックします。 |
| isint | なし | is_int() が真であるかチェックします。 |
| decimal | なし | 数値フォーマット(浮動小数点あり)であるかチェックします。 |
| natural | なし | 絶対値であるかチェックします。 |
| nozero | なし | 0を除く絶対値(つまり、自然数)であるかチェックします。 |
| range | $min, $max | $min と $max の範囲内の数値であるかチェックします。 |
日時系入力値バリデーション
| 項目 | パラメータ | 説明 |
|---|---|---|
| date | なし | 日付フォーマットであるかチェックします。 |
| time | なし | 時刻フォーマットであるかチェックします。値の形式は「H:i:s」、「H:i」、「H」の3タイプでチェックできます。 |
| mindate | $min | $min 以上であるかチェックします。 |
| maxdate | $max | $max 以下であるかチェックします。 |
| termdate | $min, $max | $min と $max の期間内の日付であるかチェックします。 |
| termdatetime | $min, $max | $min と $max の期間内の日時であるかチェックします。 |
日本語系入力値バリデーション
| 項目 | パラメータ | 説明 |
|---|---|---|
| hiragana | なし | ひらがなであるかチェックします。※UTF-8のみ |
| fullkana | なし | 全角カタカナであるかチェックします。※UTF-8のみ |
| halfkana | なし | 半角カタカナであるかチェックします。※UTF-8のみ |
| kanji | なし | 漢字であるかチェックします。※UTF-8のみ |
メソッドリファレンス
バリデーションライブラリのメソッドリファレンスです。
- 設定メソッド
- 実行/結果メソッド
- execute() : バリデーションの実行
- valid() : 通過した有効性データを取得
- error() : エラーオブジェクトを取得
- get_error() : エラーを取得
- get_errors() : 全てのエラーを取得
設定メソッド
config($config = array())
バリデーションライブラリの初期設定をします。
戻り値
型 : object Validate
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $config | array | 設定を配列で指定 |
$config に指定する設定項目については、設定を参照して下さい。
例) $vd->config(array('separator' => ';'));
init($action = 'default', $config = array())
バリデーションの初期化をします。
戻り値
型 : object Validate
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $action | string | バリデーション名(主にテーブル名を利用) |
| $config | array | 初期設定 |
$config に指定する設定項目については、設定を参照して下さい。
例) $vd->init('member');
field($name, $label = '', $rules = '')
フィールドを指定します。
戻り値
型 : object Validate
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $name | string | フィールド名(主にカラム名を利用) |
| $label | string | ラベル名を指定 |
| $rules | string | バリデーションルールを指定 |
$rules には、パイプ | 区切りで複数ルール指定ができます。ルールの引数はブラケット [] を用いてカンマ , 区切り(init() メソッドで変更可)で引数指定できます。
例) $vd->field('title', 'タイトル', 'required|maxlen[12]');
rule($name[, $param, ...])
ルールを指定します。
戻り値
型 : object Validate
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $name | string | ルール名 |
| $param | string | ルール引数値 |
$param は、可変長の引数で複数指定できます。
例) $vd->rule('range', 10, 20);
add($obj)
カスタムバリデーションをバインドします。
戻り値
型 : object Validate
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $obj | object | カスタムバリデーションメソッドを含むオブジェクト |
例) $vd->add($this);
カスタムバリデーション
クラス定義
カスタムバリデーションの定義には、クラス/メソッドを用います。
クラス名は任意の名前を利用できます。メソッド名はプレフィックス _valid_ を付加しアクセサを public にします。
例)
public function _valid_include() {}
メッセージ定義
Validate::message() スタティックメソッドでカスタムメッセージを追加します。
メッセージタグ :value 等については、get_error()を参照して下さい。
例)
Validate::message('include', '値(:value)に文字[' . $str . ']が含まれいません。');
Validate::message($rule, $message = NULL)
エラーメッセージを指定、又は取得します。このメソッドはスタティックメソッドとして利用します。
戻り値
型 : mixed
$message が無指定の場合に該当するルールのエラーメッセージを返します。
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $rule | mixed | ルール名 |
| $message | string | エラーメッセージ |
エラーメッセージで利用する メッセージタグ については get_error() を参照して下さい。
$rule に配列を指定して、複数のメッセージを指定することができます。
例) Validate::message(array('required' => ':labelの値は必須となっています', 'length' => ':labelの文字数は:param[1]文字でお願いします'))
実行/結果メソッド
execute($input = array(), $allow = FALSE, $obj = array())
バリデーションを実行します。
戻り値
型 : boolean
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $input | array | チェックデータ |
| $allow | boolean | 値がNULLのスルー(無視)フラグ |
| $obj | array | add() メソッドでバインドするオブジェクトリスト |
例) $res = $vd->execute($data) ? 'OK' : 'NG';
valid($field = NULL)
バリデーションを追加した有効性データを取得します。
戻り値
型 : mixed
$field 指定がある場合は該当のフィールド値を返します。未指定の場合は全てのフィールドリストを返します。
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $field | string | フィールド名 |
例) $vd->valid();
error($field = NULL)
バリデーションエラーオブジェクトを取得します。
戻り値
型 : mixed
$field 指定がある場合は該当フィールドのエラーオブジェクトを返します。未指定の場合は全てのエラーオブジェクトドリストを返します。
エラーオブジェクト : Validate_Exception
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $field | string | フィールド名 |
例) $vd->error('title');
get_error($field, $format, $pre = '', $suf = "\n")
バリデーションエラーを取得します。
戻り値
型 : string
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $field | string | フィールド名 |
| $format | string | メッセージフォーマット |
| $pre | string | メッセージプレフィックス |
| $suf | string | メッセージサフィックス |
メッセージフォーマットではフィールド情報に合わせて可変する6つの メッセージタグ を指定することができます。
:rule - ルール名
:label - ラベル名
:state - エラーステート文
:field - フィールド名
:value - フィールド値
:param[数値] - ルール引数値
エラーステート文は、標準で $lang = 'ja' の validate/state_ja.php を使用します。
例) $error = $vd->get_error('title', '[:label] :state');
get_errors($format, $pre = '', $suf = "\n")
全てのバリデーションエラーを取得します。
戻り値
型 : string or array
設定項目 get_errors_type の指定により文字列、又は配列で取得できます。
引数値
| 項目 | 型 | 内容 |
|---|---|---|
| $format | string | メッセージフォーマット |
| $pre | string | メッセージプレフィックス(get_errors_typeがstringの場合に利用) |
| $suf | string | メッセージサフィックス(get_errors_typeがstringの場合に利用) |
メッセージフォーマットの メッセージタグ については get_error() を参照して下さい。
例) $error = $vd->get_errors('[:label] :state');