让我们尝试为您的问题提供一些答案。
如果您还没有意识到 Zend_Form 中的验证器与 Zend_Validate 中的标准验证器相同,您通常只需使用类名作为字符串而不是调用new。过滤器和 Zend_Filter 也是如此
可用于电话号码的最接近的标准验证器是“Digits”验证器。
$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());
要记住的一件事:如果您将表单元素设置为'Required'
使用'NotEmpty'
验证器,在大多数情况下作为setRequired()
调用'NotEmpty'
。
还要记住,通常在 Zend_Form 中,过滤器是在验证之前应用的。
希望这可以帮助。