2013-07-09 31 views
1

我正在使用zend框架2,我该如何强制用户设置了最少8个字符的密码,但都是字母和数字? 这是我的代码:Zend Framework 2 Form With Password

$this->add(array(
     'name' => 'password', 
     'attributes' => array(
      'type'  => 'password', 
      'id'   => 'password', 
      'class'  => 'span12 noradius', 
      'placeholder' => 'Password' 
     ), 
     'options' => array(
      'label' => 'Password :' 
     ) 
    )); 

回答

4

你可以写一个自定义的验证,检查了这一点:http://framework.zend.com/manual/2.0/en/modules/zend.validator.writing-validators.html

class MyValid\PasswordStrength extends Zend\Validator\AbstractValidator 
{ 
    const LENGTH = 'length'; 
    const UPPER = 'upper'; 
    const LOWER = 'lower'; 
    const DIGIT = 'digit'; 

    protected $messageTemplates = array(
     self::LENGTH => "'%value%' must be at least 8 characters in length", 
     self::UPPER => "'%value%' must contain at least one uppercase letter", 
     self::LOWER => "'%value%' must contain at least one lowercase letter", 
     self::DIGIT => "'%value%' must contain at least one digit character" 
    ); 

    public function isValid($value) 
    { 
     $this->setValue($value); 

     $isValid = true; 

     if (strlen($value) < 8) { 
      $this->error(self::LENGTH); 
      $isValid = false; 
     } 

     if (!preg_match('/[A-Z]/', $value)) { 
      $this->error(self::UPPER); 
      $isValid = false; 
     } 

     if (!preg_match('/[a-z]/', $value)) { 
      $this->error(self::LOWER); 
      $isValid = false; 
     } 

     if (!preg_match('/\d/', $value)) { 
      $this->error(self::DIGIT); 
      $isValid = false; 
     } 

     return $isValid; 
    } 
} 

然后选择该自定义的验证:

$inputFilter->add($factory->createInput(array(
    'name'  => 'password', 
    'required' => true, 
    'validators' => array(
     array(
      // What ever your namespace is etc determines this.. 
      'name' => 'My\Validator\PasswordStrength', 
     ), 
    ), 
)));