-1

我正在使用 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');   
4

2 回答 2

1

让我们尝试为您的问题提供一些答案。

如果您还没有意识到 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 中,过滤器是在验证之前应用的。

希望这可以帮助。

于 2012-12-22T13:10:10.377 回答
0

您必须添加一个验证器,例如

 ->addValidators(
                'StringLength',
                true,
                array('min' => 7,   'max' => 20,'messages' => "ID NUMBER contain at least 7 character.")
            );
于 2013-02-13T09:15:08.730 回答