Zend Framework 1.12 大写/小写字符验证错误

Zend Framewok 1.12 Uppercase / Lowercase character validation error

我的表单中密码字段的条件之一是它应该有一个大写字母、一个小写字母和一个数字。为了实现这一点,我正在创建我的表单元素,如下所示。

$password = $this->createElement('password', 'password');
        $password->setAttrib('id', 'password')
                 ->setAttrib('class', 'form-control')
                 ->setAttrib('placeholder', 'Password')
                 ->setLabel('Password'.$this->indicatorIcon('required'))
                 ->setRequired(true)
                 ->addValidator('NotEmpty', true, array('messages' => $this->indicatorIcon('error').'Password can\'t be left blank'))
                 ->addValidator('StringLength', true, array('min' => 8, 'max' => 30, 'messages' => $this->indicatorIcon('error').'Password should be 8 - 30 characters long'))
                 ->addValidator('Regex', true, array('pattern' => '[A-Z]', 'messages' => $this->indicatorIcon('error').'Password should contain at least one upper case letter'))
                 ->addValidator('Regex', true, array('pattern' => '[a-z]', 'messages' => $this->indicatorIcon('error').'Password should contain at least one lower case letter'))
                 ->addValidator('Regex', true, array('pattern' => '/\d/', 'messages' => $this->indicatorIcon('error').'Password should contain at least one digit'))
                 ->addFilter('StringTrim');

但我只能验证小写字母或大写字母。我添加这些验证器的顺序优先于另一个。带数字的那个工作正常。

有办法解决这个问题吗?我已经尝试了很多其他正则表达式,但它们没有用。任何人都可以帮助我使此代码正常工作或提出替代解决方案吗?

您正在分别尝试 Regex 的 lower 和 upper。如果你试试这个,我认为它会起作用。

$password = $this->createElement('password', 'password');
        $password->setAttrib('id', 'password')
                 ->setAttrib('class', 'form-control')
                 ->setAttrib('placeholder', 'Password')
                 ->setLabel('Password'.$this->indicatorIcon('required'))
                 ->setRequired(true)
                 ->addValidator('NotEmpty', true, array('messages' => $this->indicatorIcon('error').'Password can\'t be left blank'))
                 ->addValidator('StringLength', true, array('min' => 8, 'max' => 30, 'messages' => $this->indicatorIcon('error').'Password should be 8 - 30 characters long'))
                 ->addValidator('Regex', true, array('pattern' => '(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+', 'messages' => $this->indicatorIcon('error').'Password should contain at least one upper case letter and one lower case letter minimum and should contain at least one digit'))
                 ->addFilter('StringTrim');

我只是将 3 个模式连接成一个。