あなたの質問に対するいくつかの答えを試してみましょう。
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では、検証の前にフィルターが適用されることを忘れないでください。
お役に立てれば。