0

嗨,我正在使用 codeigniter 表单验证。

在我的图书馆中,我设置了表单验证

$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,可能是问题,如何解决这个问题,在此先感谢

4

2 回答 2

1

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

这样做的目的是什么?-

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_.

于 2012-09-04T10:08:45.170 回答
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 在哪里?即它在什么文件中?

于 2012-09-04T08:15:58.463 回答