让我们试着给你一些回答你的问题。
如果你还没有意识到这一点在Zend_Form中的验证程序是在Zend_Validate中用作standard validators相同的验证,通常只需要使用类名作为串而不是调用新。对于过滤器也是如此,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过滤器通常在验证之前应用。
希望这会有所帮助。
试图避免讽刺一个验证...你阅读手册? http://framework.zend.com/manual/1.12/en/zend.form.elements.html#zend.form.elements.validators – ficuscr
ficuscr - 实际上这可能听起来很奇怪,但我无法也没有找到在文档中(虽然很明显它必须在那里)你在这里链接的页面。谢谢队友! – mrGott
其实我可以相信。我不认为这些文档的结构非常好。很高兴你找到你正在寻找的东西。 – ficuscr