FormKit(フォームキット):バリデートメソッド

バリデートメソッド

必須バリデートメソッド

メソッド名 解説 サンプル
REQ() 要素を入力・選択必須にします。
								'onamae' => REQ(),
							
REQ('要素名') 指定の要素が空でない場合に必須になります。
								'onamae' => REQ('age'),
							
REQ('要素名','値') 指定の要素名が指定の値の場合に必須になります。比較演算子は == です。
								'onamae' => REQ('gender','男性'),
							
REQ('要素名','オペレータ','値') 指定の要素名と値を指定のオペレータで比較して、正しい場合に必須になります。
								'onamae' => REQ('gender','===','男性'),
							
REQ(['条件式']) 指定の条件式を実行し、正しい場合に必須になります。PHPのif文の中身と同じ文法で書けます。
								'onamae' => REQ(['$gender->val==="男性"']),
							

判定バリデートメソッド

メソッド名 解説 サンプル
LENGTH() 要素の長さを判定します。引数が1つならその数を最大数に、引数が2つなら第一引数~第二引数の範囲内に、第三引数が true なら改行コードをカウントしない数で評価します。また、全角/半角関係なく1文字は1文字でカウントします。
尚、一つの要素に LENGTH() をチェーンで複数繋いだ場合、先に書いたものが優先されますのでご注意下さい。(この仕様のため、共通バリデートの afterLENGTH() を指定していても、要素ごとに LENGTH() の長さを上書できるということです)
								'onamae' => LENGTH(10),
							
								'onamae' => LENGTH(3,10),
							
								'onamae' => LENGTH(3,10,true),
							
EMAIL() 正しいメールアドレスかをチェックします。引数を true にすると、メールアドレスのホストが正しく存在するかDNSに接続してチェックしますので、より正確にメールアドレスの判定ができます。
								'email' => EMAIL(),
							
								'email' => EMAIL(true),
							
MINMAX('最小値','最大値') 数値としての範囲を判定します。第一引数に最小値、第二引数に最大値を設定します。第三引数を true にすると小数点として判定します。
								'age' => MINMAX(0,19),
							
								'tall' => MINMAX(120.0,180.5,true),
							
NUM() 半角数字の長さを判定します。引数が1つならその数を最大数に、引数が2つなら第一引数~第二引数の範囲内かを調べます。全角文字や記号が含まれていても、半角変換&数字以外除去して読める数値だけにしてから判定します。
								'mynumber' => NUM(12),
							
REGEX('/正規表現/') 指定の正規表現で入力を判定します
								'zip' => REGEX('/^\d{3}\-\d{4}$/'),
							
SAME('要素名') 指定の要素と同値かどうかを判定します。
								'email2' => SAME('email'),
							
ITEM() 指定の要素のいずれかにマッチするか判定します。チェックボックスや選択肢などの要素を正しく制限するための設定です。
								'color' => ITEM('赤','青','黄'),
							
EXT() アップロードファイルの拡張子を判定します。
								'img1' => EXT('jpg','jpeg','png','gif'),
							
MB() アップロードファイルの容量を判定します。但し、サーバ設定や php.ini での上限が優先されます。
								'img2' => MB(3),
							
WIDTH() 画像アップロードファイルの横幅ピクセルを判定します。
								'pic' => WIDTH(1000),
							
HEIGHT() 画像アップロードファイルの高さピクセルを判定します。
								'pic' => HEIGHT(300),
							
PREF() 指定要素は都道府県かどうかを判定します。第一引数を true にすると「宮城県」→「宮城」の用に省略もOKになります。(ただし「北海」おかしいので除外します)
								'pref' => PREF(),
							
COUNTS() チェックボックス/複数選択プルダウンなど複数選択が可能な要素の、選択されている個数を判定します。引数が1つのみの場合は引数=選択数、引数が2つの時は数の範囲として判定します。
								'colors' => COUNTS(3),
							
								'colors' => COUNTS(1,6),
							
TEL() 電話番号であるか判定します。但し厳密ではなく、半角0~9と半角の「-」「+」のみで構成されているかを判定します。また、第一引数に許可したい文字を列挙できます。
								'tel' => TEL(),
							
								'tel' => TEL('()'),
							
HIRA() 全/半角カナ→全角ひらがな変換後、ひらがなのみで構成されているかを判定します。また、第一引数に許可したい文字を列挙できます。
								'kana' => HIRA(),
							
								'kana' => HIRA('、。'),
							
KATA() 半角カナ/全角ひらがな→全角カナ変換後、カタカナのみで構成されているかを判定します。また、第一引数に許可したい文字を列挙できます。
								'kana' => KATA(),
							
								'kana' => KATA('、。'),
							
ZIP() 郵便番号か判定します。(厳密ではありません)第一引数には桁数の3,4,7が入力できます。第二引数を true にすると勝手にハイフンが入らなくなります。
								'zip' => ZIP(),
							
								'zip1' => ZIP(3),
							
YEAR() 年数の範囲か(数値4桁か)判定します。
								'birth_year' => YEAR(),
							
MONTH() 月数の範囲か(数値1~12か)判定します。
								'birth_month' => MONTH(),
							
DAY() 日数の範囲か(数値1~31か)判定します。
								'birth_day' => DAY(),
							

変換バリデートメソッド

メソッド名 解説 サンプル
CONV() PHPの mb_convert_kana() を実行して変換します。
								'data' => CONV('S'),
							
DELRETURN() 改行コード \r \n \r\n \f を全て削除します。
								'data' => DELRETURN(),
							
DELWORD() 指定文字を除去します。引数の形式は、PHPの mb_ereg_replace() 関数の第一引数に渡すものと同様です。
								'data' => DELWORD('あいう|山田'),
							
ZEN2HAN() 全角から半角に変換します。半角に変換できるもののみです。
								'data' => ZEN2HAN(),
							
HAN2ZEN() 半角から全角に変換します。全角に変換できるもののみです。
								'data' => HAN2ZEN(),
							

制御バリデートメソッド

メソッド名 解説 サンプル
ERRORSET() このメソッドチェーンの時点でエラーメッセージがセットされている場合に、指定の文字で上書きします。但し、1要素中でメッセージ上書きが実行されるのは一度のみ。(この制限により、1要素中に設定した各バリデートごとの直後に書いた ERRORSET() で独自のエラーメッセージがそれぞれ設定できるということです。
								'onamae' => REQ() -> ERRORSET('なまえいれてね!'),
							
								'onamae' => REQ() -> ERRORSET('なまえいれてね!') ->
									LENGTH(10) -> ERRORSET('10文字超えてるよ!'),
							
FUNC() 独自の判定関数がその場に書けます。まず、引数 $me で該当の要素オブジェクトが入ってきます。$me->val で要素の値が取れ、$me->error にエラーメッセージがセットできます。判定成功なら true を返し、判定失敗なら false を返して下さい。また、別の要素を参照したい場合は、 element('要素名'); として要素オブジェクトが取得できます。そちてもちろん次のバリデートにチェーンすることもできます。要素オブジェクトの詳細な構成は formkit/lib/FormKitElement.php をご参照下さい。
								'user_id' => FUNC(function($me){
									$tall = element('tall');
									if($tall->val >= 200) return true;
									$me->error = '身長が200cm以上の人だけです!';
									return false;
								}) -> REGEX('/^[a-zA-Z0-9]{8,12}$/'),
							

サブバリデートメソッド

設定ファイルでアンダーバーから始まるバリデート定義をサブバリデートと言い、以下のバリデートメソッドが利用できます。複数要素を結合したり判定したりして、一つの結果にまとめるのが目的です。(通常のバリデートメソッドも利用可能です)

メソッド名 解説 サンプル
NONG() 指定要素にエラー状態がひとつもないないかどうか判定します。すべて未入力状態かOK状態ならOK、エラー状態が1つ以上あればNGになります。
								'_address' => NONG('zip1','zip2','pref','address')
							
ALLOK() 指定要素が全てOK状態かどうか判定します。すべてOK状態ならOK、未入力状態かエラー状態が1つ以上あればNGになります。
								'_address' => ALLOK('zip1','zip2','pref','address')
							
ANYOK() 指定要素のどれか1つ以上がOK状態かどうかを判定します。第一引数に数値を記述することで最低個数を指定可能です。
								'_address' => ANYOK('zip1','zip2')
							
								'_address' => ANYOK(3,'zip1','zip2','pref','address')
							
GLUE() 第一引数の文字で、第二引数以降のデータを連結します。連結した文字は、その後にチェーンで繋がったバリデートメソッドで判定に利用されます。
								'_mail' => GULE('@','mail_head','mail_foot')->EMAIL()
							
DATES() 正しい日付か判定します。これは通常の単体要素にも使えます。単体の要素に使う場合は「2017-3-30」や「2017年3月30日」等の形式を正しい日付として判定します。
								'birth_date' => DATES();
							
								'_birth_date' => DATES('birth_year','birth_month','birth_day');
							

バリデートメソッドの自作

既存のバリデートメソッドは、formkit/lib/validate-methods/ 内に入っており、ここに自作したPHPファイルを配置することで新たにバリデートメソッドを追加することが出来ます。以下、サンプルで HOGE() というバリデートメソッドを作成します。(慣例的に大文字で作成して下さい)このメソッドは、入力値が数字3桁ならOK、それ以外はNGとなるバリデータとします。また、引数を true にすると最初に全角→半角変換を行うように設計します。

バリデートメソッドはチェーン可能な構成のため若干複雑な作りになっています。基本的に中央付近の return function の中身をいじるようにするといいでしょう。

ファイルの冒頭に必ず namespace FK; を記述して下さい。


namespace FK;

/**
 * [HOGE]
 * -------------------------------------------------------------------
 * 数字3桁でできているか。(第一引数で数字変更可能)
 * ex. HOGE() ... 数字3桁かどうかをチェック
 * ex. HOGE(true) ... 全角→半角に変換後に数字3桁かどうかをチェック
 */
function HOGE(){ return (new Validate())->HOGE(func_get_args()); }
function __HOGE()
{
	// 可変引数の展開
	$args = func_get_args();
	if(is_array(@$args[0])) $args = $args[0];

	return function ($element) use($args)
	{
		// global $FK; # $FK['onamae']->valで他の要素の値にアクセス可能
      	$val = $element->val;
		if($args[0]) $val = mb_convert_kana($val, 'n'); // 第一引数が正なら全角数字→半角に。
      	if(preg_match('/^\d{3}$/', $val){
            // 数字3桁です
			return true;
      	} else {
          	// 数字3桁じゃないです
		  	$element->error_set('数字3桁じゃありません。');
		  	return false;
      	}
	};
}
			

ちなみに、既存のPHP関数とバリデートメソッド名がぶつかると、予期せぬエラーが発生する場合がありますので、PHPの予約語と被らないようにご注意下さい。PHP関数は大文字小文字を区別しないので、例えば STRLEN() というバリデートメソッドは、すでに strlen() がPHP標準関数として存在するのでダメです。

これで、設定ファイル formkit/config.php で上記のバリデートが使えるようになります。以下、使用サンプルです。

$Config['validate'] = [

	# - 各要素のバリデート
	'list' => [
		'onamae'     => REQ(),
		'num_three'  => REQ() -> HOGE(), # 数字3桁かチェック
		...
			

以上です。