-1

Zend Framework を使用して登録ページを開発しています。

電話、携帯電話、ID 番号は、検証したいフィールドです。これまでのところ、Not Empty のみの検証があります。

適切な解決策を見つけることができなかったので、あなたが私を助けてくれるかもしれません。

私は電話と携帯電話のフィールドをexの整数だけにしたい. 12345667 および特定の長さを持たせるには、たとえば。最低7桁。

同じことが ID NUMBER フィールドにも当てはまります。

これが今の様子です:

$phone = new Zend_Form_Element_Text('phone');
$phone->setLabel('Phone')
      ->setAttribs(array('class' => 'inputtext'))       
      ->setOptions(array('size' => '50'))       
      ->setRequired(false)
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addValidator('NotEmpty');   
4

2 に答える 2

1

あなたの質問に対するいくつかの答えを試してみましょう。

Zend_Formのバリデーターが、Zend_Validateの標準バリデーターとして使用されているものと同じであることにまだ気付いていない場合は、通常、 newを呼び出す代わりに、クラス名を文字列として使用します。フィルタとZend_Filterについても同じことが言えます。

電話番号に使用できる最も近い標準のバリデーターは、「数字」バリデーターです。

$phone = new Zend_Form_Element_Text('phone');
$phone->setLabel('Phone')
      ->setAttribs(array('class' => 'inputtext'))       
      ->setOptions(array('size' => '50'))       
      ->setRequired(false)
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addValidator('NotEmpty');
//add digits validator , closest available to phone number in standard validators;
$phone->addValidator('Digits');

ただし、 Zend_Validate_Abstractを拡張して、独自のバリデーターを作成する方が適切な場合があります。電話番号バリデーターは次のようになります。

//validates US phone numbers using Zend_Validator_Regex
class MyNamespace_Validator_Form_Usphone extends Zend_Validate_Abstract
{
    const PHONE = 'phone';

    protected $_messageTemplates = array(
        self::PHONE => "'%value%' is not a valid U.S. phone number.
            Phone number must be entered in (xxx)xxx-xxxx or xxx-xxx-xxxx format."
    );

    public function isValid($value)
    {
        $this->_setValue($value);

        $isValid = true;
        $pattern = ('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/');
        if (!preg_match($pattern, $value)) {
            $this->_error(self::PHONE);
            $isValid = false;
        }
        return $isValid;
    }
}

フォーム要素で使用されます。

$phone->addValidator(new MyNamespace_Validator_Form_Usphone());

覚えておくべき1つのこと:'Required'バリデーターを使用するようにフォーム要素を設定した内部呼び出し'NotEmpty'として冗長になりsetRequired()'NotEmpty'

また、通常、Zend_Formでは、検証の前にフィルターが適用されることを忘れないでください。

お役に立てれば。

于 2012-12-22T13:10:10.377 に答える