我有注册表格,其中有名称,电子邮件等字段。在电子邮件字段中,当我键入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'))
如果确实如此,请返回一个错误,并带有诸如"您确定输入的域(%域%)有效的域?"。
再次显示表单时,请确保测试该错误是否存在,并且当它存在时,只需设置隐藏的字段。
最后,更改验证器,因此当选中复选框时,它不再对列表进行验证(在有效方法中使用第二个参数,称为上下文,并包含来自表单的所有字段)。