バリデーション ライブラリ
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');