php5.1.6でHTML_QuickFormを使用しています。

1から1080までの数字のみ入力可にしたいのですが、addRuleではどのように書けばよろしいでしょうか?
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/05/14 10:32:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:Banias No.1

回答回数237ベストアンサー獲得回数19

ポイント2pt

addRule('hogehoge', '1-1080までの値を入力してください', 'NumericRange', array(1, 1080));

id:seadwell

ご回答ありがとうございます。

クラスを作れば?ということですか?

2011/05/09 13:37:31
id:tdoi No.2

回答回数174ベストアンサー獲得回数75

ポイント44pt

手っ取り早いのは、callbackを使ってしまうことでしょうか。

ベタベタに書くとこんな感じでしょうか。

function checkrange($value)
{
  return ((1 <= $v) && ($v <= 1080));
}

$form = new HTML_QuickForm('frmTest', 'get');
$form->addElement('header', 'MyHeader', 'QuickFormのテスト');
$form->addElement('text', 'text1', 'TEXT');
$form->addElement('submit', 'btnSubmit', '送信');

$form->addRule('text1', 'required', 'required');
$form->addRule('text1',  '1-1080までの値を入力してください', 'callback', 'checkrange'); 

if ($form->validate()) {
  $form->freeze();
}

$form->display();

何かの参考になれば。

id:seadwell

ご回答ありがとうございます。

お教えいただいたことについていろいろトライしてみますが、なかなかできません><

簡単にできそうで難しいですね。

2011/05/10 12:21:11
id:Banias No.3

回答回数237ベストアンサー獲得回数19

クラスを作れば?ということですか?

仰っていることが分からないのですが、addRuleはメソッドですから、当然、クラス(というよりオブジェクト)は用意されているものと考えているのですが。

id:seadwell

お教えの通り記述しても動かないのでHTML_QuickFormの中をNumericRangeで調べてみましたらお教えいただいたルールはありませんでした。

で、調べてみると以下のようなBBSを見つけました。

http://old.nabble.com/-PHP-users-27728--PEAR:HTML_QuickForm_Rule...

そこで作れば?ということかなと思いました。

2011/05/09 17:33:22
id:i4ooon No.4

回答回数56ベストアンサー獲得回数20

ポイント44pt

tdoi さんのコードにちょっと修正が必要です。

checkrange関数の引数を$value→$vに変更するだけです。

ただ、この簡単なチェックだと、「01080」のように入力された場合も、OKになってしまいますので、validateロジックは少し詰めないとダメですね。

function checkrange($v)
{
  return ((1 <= $v) && ($v <= 1080));
}

$form = new HTML_QuickForm('frmTest', 'get');
$form->addElement('header', 'MyHeader', 'QuickFormのテスト');
$form->addElement('text', 'text1', 'TEXT');
$form->addElement('submit', 'btnSubmit', '送信');

$form->addRule('text1', 'required', 'required');
$form->addRule('text1',  '1-1080までの値を入力してください', 'callback', 'checkrange'); 

if ($form->validate()) {
  $form->freeze();
}

$form->display();
id:seadwell

ご回答ありがとうございます。

試したのですが動きませんでした。

ちょっとじっくり試す時間がとれませんでしたが、質問が終了するのでとりあえずお礼です。

2011/05/14 10:30:14
  • id:tdoi
    i4ooonさん、フォローありがとうございました。
    動作確認後に書いてる際に見やすくしたつもりが、抜けてましたね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません