[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 メーリングリストの案内