今天我发现Zend\Form\Element\Email
没有使用Zend\Validator\EmailAddress
进行电子邮件验证,而是使用以下Regex Validator:
'/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/'
正则表达式验证程序允许使用example@world-test-de
等电子邮件地址。
在提交错误报告之前,我想检查一下:
a)为什么默认情况下不使用EmailAddress验证程序?
b)正则表达式模式错误吗?
如果使用该代码,上述电子邮件地址有效:
$this->add(array(
'type' => 'Zend\Form\Element\Email',
'name' => 'emails',
'options' => array(
'label' => 'Notification recipients',
'description' => 'separate multiple email addresses with comma',
),
'attributes' => array(
'multiple' => true
),
));
只要我更改默认电子邮件验证程序,验证就会正常运行:
$this->add(array(
'type' => 'Zend\Form\Element\Email',
'name' => 'emails',
'options' => array(
'label' => 'Notification recipients',
'description' => 'separate multiple email addresses with comma',
),
'attributes' => array(
'multiple' => true
),
));
**$this->get('emails')->setEmailValidator(new \Zend\Validator\EmailAddress());**
答案 0 :(得分:2)
我认为这不是一个错误
Zend\Form\Element\Email
是类型为email
的HTML5输入,因此可以实现HTML5规范 - > https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address
如你所见:
以下JavaScript和Perl兼容的正则表达式是 执行上述定义。
/ ^ [A-ZA-Z0-9#$%&安培;!?“ + / = ^ _`{|}〜 - ] + @一个-ZA-Z0-9(?: .A-ZA-Z0-9?) $ /
这与Zend用于验证电子邮件的正则表达式完全相同