バリデーション ライブラリ

Ziu 付属のバリデーションライブラリです。データベースへ渡す値などのデータ検証を行う機能を提供します。

  1. 設定
  2. 正規表現
  3. 使い方
  4. ルール
  5. メソッドリファレンス

設定

バリデーションライブラリを利用するための設定を行ないます。

単体で利用の設定方法

本バリデーションライブラリは、単体で使用することができます。

// 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()メソッドの取得形式を指定(stringarrayが利用可能)
subdir string core/lib/validate メッセージ言語ファイルの配置ディレクトリを指定
lang string ja メッセージ言語(デフォルトで'ja'のみ用意)
separator string , ルール引数値のセパレータ
regex array 注) 正規表現を参照 各バリデーションの正規表現

langja 以外を指定する場合は、バリデーションライブラリフォルダ配下にメッセージ言語を別途拡張する必要があります。
ja のメッセージ言語ファイル : validate/state_ja.jp

設定項目 - 初期化メソッド「init()」

項目 初期値 説明
$action string default バリデーション名 (主にテーブル名を利用)
$config array 注) 初期設定メソッド参照 初期設定リスト

正規表現

バリデーションで利用している正規表現を定義することができます。
日本語系入力値バリデーションの hiraganafullkanahalfkanakanji においては文字コードが 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による文字列かチェックします。
インターネット/コミュニケーション系入力値バリデーション
項目 パラメータ 説明
email なし メールアドレスフォーマットであるかチェックします。
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のみ

メソッドリファレンス

バリデーションライブラリのメソッドリファレンスです。

  1. 設定メソッド
  2. 実行/結果メソッド

設定メソッド

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]文字でお願いします'))

▲リファレンスTOP

実行/結果メソッド

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_typestringの場合に利用)
$suf string メッセージサフィックス(get_errors_typestringの場合に利用)

メッセージフォーマットの メッセージタグ については get_error() を参照して下さい。

例) $error = $vd->get_errors('[:label] :state');

▲リファレンスTOP