Php 在zend framework 2中验证电子邮件

Php 在zend framework 2中验证电子邮件,php,zend-framework2,Php,Zend Framework2,我有登记表,其中有姓名、电子邮件等字段。在电子邮件字段中键入**email@yahoo.co**接受。但实际上这是错误的,因为email@yahoo.co**不是以m结尾。应该是**email@yahoo.com 是否有任何方法来验证它,以便它只接受以.com结尾且有@的电子邮件 查看/注册: <?php echo $this->form()->openTag($form); ?> <dl class="zend_form"> <dt><?p

我有登记表,其中有姓名、电子邮件等字段。在电子邮件字段中键入**email@yahoo.co**接受。但实际上这是错误的,因为email@yahoo.co**不是以m结尾。应该是**email@yahoo.com

是否有任何方法来验证它,以便它只接受以.com结尾且有@的电子邮件

查看/注册:

<?php
echo $this->form()->openTag($form);
?>
<dl class="zend_form">
<dt><?php echo $this->formLabel($form->get('name')); ?></dt>
<dd><?php 
    echo $this->formElement($form->get('name'));
    echo $this->formElementErrors($form->get('name'));
?></dd>

<dt><?php echo $this->formLabel($form->get('email')); ?></dt>
<dd><?php 
    echo $this->formElement($form->get('email'));
    echo $this->formElementErrors($form->get('email'));
?></dd>

<dt><?php echo $this->formLabel($form->get('password')); ?></dt>
<dd><?php 
    echo $this->formElement($form->get('password'));
    echo $this->formElementErrors($form->get('password'));
?></dd>

<dt><?php echo $this->formLabel($form->get('confirm_password')); ?></dt>
<dd><?php 
    echo $this->formElement($form->get('confirm_password'));
    echo $this->formElementErrors($form->get('confirm_password'));
?></dd>
<br/>
<dd><?php 
    echo $this->formElement($form->get('submit'));
    echo $this->formElementErrors($form->get('submit'));
?></dd>

</dl>
<?php echo $this->form()->closeTag() ?>



提前感谢

您可以使用自定义验证器验证表单,在该验证器中,您允许来自特定白名单的域(例如,可以使用回调验证器来完成,尽管适当的自定义验证器会更好)

这实际上取决于您的用例,但您也可以使用黑名单进行验证:)

一个有趣的解决方案可能是有一个隐藏的字段(复选框或radiobutton),首先使用配置中的数组键对黑名单进行验证,并将适当的域作为错误消息的参数传递

假设您的配置包含以下内容

return [
    'domains_blacklist' => [
        'yahoo.co' => 'yahoo.com',
    ],
];
在自定义验证器中,检查电子邮件是否使用以下字符串之一完成:

in_array($domain_from_value, array_keys($this->config['domains_blacklist'))
如果是,则返回一个错误,并显示一条消息,如“您确定键入的域(%domain%)有效吗?”

再次显示表单时,请确保已测试错误是否存在,并且当错误存在时,只需将隐藏字段设置为可见


最后,更改验证器,以便选中复选框时不再根据列表进行验证(在valid方法中使用第二个参数,它称为context并包含表单中的所有字段)。

仅用于记录<代码>email@yahoo.co它实际上是一个有效的电子邮件地址!域名
yahoo.co
也是有效的,它确实存在。好的,兄弟们,非常感谢。