我有一个电子邮件字段,在我的表单验证中不需要。它应该可以留空。但是,当我使用表单验证的set_rules的“valid_email”参数时,它仍然会显示一条错误消息,如果该字段尚未填写,则不应检查此电子邮件无效。
答案 0 :(得分:4)
规则参考
检查此问题的reference告诉我们以下有关valid email
规则的内容:
如果表单元素不包含有效的电子邮件地址,则返回FALSE。
空字段以及值不正确的字段都是如此。
<强>修剪强>
我在CodeIgniter提供的示例中注意到,电子邮件通常不仅是必需的,而且需要是有效的电子邮件,但也会被修剪。这可能会导致不同的结果。
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
在验证过程中,考虑以下内容:
// If the field is blank, but NOT required, no further tests are necessary
if ( ! in_array('required', $rules) AND is_null($postdata))
可能是您的电子邮件字段的内容不完全是 null ,因此提出了valid_email
要求的标记。
可能的相关错误
在这个答案发布之前三个月,就bitbucket讨论了这个话题。可以在 https://bitbucket.org/ellislab/codeigniter-reactor/issue/117/input-fields-are-automatically-required 查看讨论。
声明即使未设置required
规则,在标记中使用数组语法(参见下文)也会导致类似的错误:
<input name="user[email]" />
此处提供了进一步的讨论和补丁,http://codeigniter.com/forums/viewthread/159243。一个似乎可以解决问题的建议修补程序是在上述代码中用is_null()
替换empty()
调用:
以下内容:
if ( ! in_array('required', $rules) AND is_null($postdata))
变为:
if ( ! in_array('required', $rules) AND empty($postdata))
答案 1 :(得分:0)
您只需要了解''
不是有效的电子邮件地址。如果您不想验证某些postdata而不关心它是否为空,则不应对其设置规则,如下所示:
if($this->input->post('item'))
{
$this->form_validation->set_rules('item', 'Item number', 'trim|alpha_numeric|max_length[30]');
}
在这种情况下,如果没有为“item”提交任何内容,则不会添加任何规则,因此其余数据将照常进入验证阶段等。
答案 2 :(得分:0)
根据https://codeigniter.com/user_guide/libraries/validation.html?highlight=validation#id28
使用permit_empty
这个
允许字段接收空数组、空字符串、null 或 假
所以你的代码看起来像这样:
$this->form_validation->set_rules('email', 'Email', 'permit_empty|valid_email');