[PHP-users 27728] PEAR:HTML_QuickForm_Rule による入力数値チェック

神守 忠 kammoridensya @ yahoo.co.jp
2005年 12月 2日 (金) 10:18:48 JST


お世話になります。
TKと申します。

あるテキストボックスに入力された値が、
特定の範囲に収まっているかどうかを
検証する HTML_QuickForm_Rule を作成しています。

その実装方法について、悩んでおります。
同じようなことを悩まれた方がおられましたら、
ご教授願えないでしょうか。


-------- 呼び出し側 -----------
//ルールレジスト
$form->registerRule('NumericRange', null,
'originalRangeCheck');

// 0から10以外の値であればエラー
$form->addRule(array('test_value', 0, 10), "0-10までの値
を入力してください", 'NumericRange');

-------- クラス -----------
class originalRangeCheck extends HTML_QuickForm_Rule{

	function validate($array_value)
	{
		$target = $array_value[0];
		$from   = $array_value[1];
		$to     = $array_value[2];

		if (($from <= $target) and ($target <= $to)) {
			return true;
		}else{
			return false;
		}
	}
}

-------- 結果 -----------
何を入力してもvalidate結果としてfalseが帰ってくる。

変数の状態

$target = test_valueが入る
$from   = 値なし
$to     = 値なし

-------- 考察 -----------
validate メソッドにおいては
引数にはフォームオブジェクトしか指定できない。
従って、0、10のような固定値を引数に渡すことができない?


-------- 対応案1 -----------
呼び出し側で
'from_value','to_value' を hiddenで作成し、
値をセット後、それらを引数で渡す。

$form->addRule(array('test_value', 'from_value',
'to_value'), "0-10
までの値を入力してください", 'NumericRange');

// → 「何を入力してもvalidate結果としてfalseが帰ってく
る。

変数の状態

$target = test_valueが入る
$from   = 値なし
$to     = 値なし

// → hiddenも渡せない??


-------- 解決案2 -----------
$form->addRule('test_value', '数値で入力してください',
'numeric');
$form->addRule('test_value', '1桁で入力してください',
'rangelength', array(0, 1));

// → 「0から5」などに対応できない・・・。


-------- 解決案3 -----------
呼び出し側で
'from_value','to_value' を hidden で作成し、

$form->addRule(array('test_value', 'from_value'), "0以上
の値を入力してください", 'compare', 'gte');
$form->addRule(array('test_value', 'to_value'),   "10以
下の値を入力してください", 'compare', 'lte');

// → 一つのエラーメッセージにまとめることができない・・
・。
//    一つ一つhidden をオブジェクトを作成しなくてはなら
ない。


実によくあるバリデートパターンだと思うのですが、
HTML_QuickForm_Ruleをお使いの皆様は、
どのような方法を用いておられるのでしょうか。

ご教授いただけますようお願いいたします。
よろしくお願いいたします。



PHP-users メーリングリストの案内