2012-09-04 32 views
0

您好我正在使用codeigniter表单验证。自定义验证方法不适用在代码验证表单验证中使用'CI'

我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

为什么不使用内置的valid_email方法? –

+0

@shayan,我想添加一些自定义验证 –

回答

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位于何处?即它在哪个文件中?

+0

valid_email_check函数是同一个文件,公共函数valid_email_check() –

+0

什么也没有发生,它只是忽略验证 –

+0

当你直接运行它(没有CI的表单验证) ?将其设置为基于false或true来回显某些内容。 – Mudshark

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_前缀它。