在Zend Framework中验证电子邮件2



我有注册表格,其中有名称,电子邮件等字段。在电子邮件字段中,当我键入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'))

如果确实如此,请返回一个错误,并带有诸如"您确定输入的域(%域%)有效的域?"。

再次显示表单时,请确保测试该错误是否存在,并且当它存在时,只需设置隐藏的字段。

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

最新更新