在zend框架中验证电子邮件2

时间:2016-12-13 14:37:02

标签: 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><?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() ?>

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用自定义验证程序验证表单,在该验证程序中允许来自特定白名单的域(例如,可以使用回调验证程序完成,即使正确的自定义验证程序会更好)。

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

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

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

return [
    'domains_blacklist' => [
        'yahoo.co' => 'yahoo.com',
    ],
];

在自定义验证程序中,检查电子邮件是否以其中一个字符串结束:

in_array($domain_from_value, array_keys($this->config['domains_blacklist'))

如果出现这种情况,请返回错误消息,例如“您确定您键入的域名(%domain%)是否有效?”。

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

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