在codeigniter表单验证中使用“CI”时,自定义验证方法无效

时间:2012-09-04 07:42:59

标签: php codeigniter validation codeigniter-form-helper

您好我正在使用codeigniter表单验证。

在我的libraray中,我设置了表单验证

$this->ci->form_validation->set_rules ( 'businessemail', 'Business Email', 'required|xss_clean|min_length[6]|callback_valid_email_check' );

和我的valid_email_check功能

public function valid_email_check($email_address)
{
    if(!trim($email_address))
    {
        return TRUE;
    }
    $email_explode = explode("@", $email_address);

    $valid = preg_match("/^(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/",trim($email_explode[0]));

    if(!$valid)
    {
        $this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

事情是

required|xss_clean|min_length[6]

正确验证,只有自定义验证消息无效。

我在这里做了什么,我认为使用CI可能是问题, 如何解决这个问题,提前谢谢

2 个答案:

答案 0 :(得分:1)

您说您正在库中设置验证规则。根据CodeIgniter的用户指南,这应该在controller中完成,或者您可以将它们保存在config file中。

这是为了什么目的? -

if(!trim($email_address))
{
    return TRUE;
}

这个逻辑似乎对我有点倒退,例如 - 如果你将空字符串传递给函数,它将返回TRUE。除非我忽略了这一点,否则不是你想要实现的目标。

您只需将trim添加到$this->ci->form_validation->set_rules参数中,然后将其从valid_email_check功能中移除。

使用CI的valid_email规则有什么问题?没有必要重新发明轮子,除非你有充分的理由。

这是一个可以接受的解决方案吗? -

$this->ci->form_validation->set_rules ('businessemail', 'Business Email', 'trim|required|xss_clean|min_length[6]|valid_email');

如果你扩展了form_validation库,这就是你的功能所在,那么你就不需要在callback_前加上它。

答案 1 :(得分:0)

您如何知道自定义验证无效?

以下是什么回报?

public function valid_email_check($email_address)
{
     this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters'); 
     return FALSE;
}

此外 - 您的valid_email_check位于何处?即它是什么文件?