2012-12-20 135 views
-1

我正在使用Zend Framework开发注册页面。验证表单文本输入

电话,手机,身份证号码是我想验证的字段。到目前为止,我只对非空进行验证。

我无法找到正确的解决方案,所以也许你可以帮助我。

我希望手机和手机领域只是整数为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'); 
+2

试图避免讽刺一个验证...你阅读手册? http://framework.zend.com/manual/1.12/en/zend.form.elements.html#zend.form.elements.validators – ficuscr

+0

ficuscr - 实际上这可能听起来很奇怪,但我无法也没有找到在文档中(虽然很明显它必须在那里)你在这里链接的页面。谢谢队友! – mrGott

+1

其实我可以相信。我不认为这些文档的结构非常好。很高兴你找到你正在寻找的东西。 – ficuscr

回答

1

让我们试着给你一些回答你的问题。

如果你还没有意识到这一点在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过滤器通常在验证之前应用。

希望这会有所帮助。

0

你必须添加像

->addValidators(
       'StringLength', 
       true, 
       array('min' => 7, 'max' => 20,'messages' => "ID NUMBER contain at least 7 character.") 
      );