我正在使用Zend Framework开发注册页面。
电话,手机,身份证号码是我要验证的字段。到目前为止,我只对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');
答案 0 :(得分:1)
让我们试着给你一些问题的答案。
如果你还没有意识到Zend_Form中的验证器与Zend_Validate中用作standard validators的验证器相同,你通常只使用类名作为字符串而不是调用< EM>新。过滤器和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过滤器。
希望这有帮助。
答案 1 :(得分:0)
你必须添加一个像
这样的验证器 ->addValidators(
'StringLength',
true,
array('min' => 7, 'max' => 20,'messages' => "ID NUMBER contain at least 7 character.")
);