我有注册表格,其中有姓名,电子邮件等字段。在我输入** 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() ?>
提前致谢
答案 0 :(得分:0)
您可以使用自定义验证程序验证表单,在该验证程序中允许来自特定白名单的域(例如,可以使用回调验证程序完成,即使正确的自定义验证程序会更好)。
这实际上取决于您的用例,但您也可以使用黑名单验证:)
一个有趣的解决方案可能是隐藏字段(复选框或单选按钮),首先使用配置中数组的键验证黑名单,并将正确的域作为错误消息的参数传递给..
假设您的配置包含以下内容
return [
'domains_blacklist' => [
'yahoo.co' => 'yahoo.com',
],
];
在自定义验证程序中,检查电子邮件是否以其中一个字符串结束:
in_array($domain_from_value, array_keys($this->config['domains_blacklist'))
如果出现这种情况,请返回错误消息,例如“您确定您键入的域名(%domain%)是否有效?”。
当您再次显示表单时,请确保已测试错误是否存在,以及何时存在只是将隐藏字段设置为可见。
最后,更改验证器,以便在选中复选框时,它不再对列表进行验证(在有效方法中使用第二个参数,它称为上下文并包含表单中的所有字段)。