避免对CodeIgniter中的非必填字段执行表单验证强制检查

时间:2011-06-25 21:42:17

标签: codeigniter validation

我有一个电子邮件字段,在我的表单验证中不需要。它应该可以留空。但是,当我使用表单验证的set_rules的“valid_email”参数时,它仍然会显示一条错误消息,如果该字段尚未填写,则不应检查此电子邮件无效。

3 个答案:

答案 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');