CodeIgniter表单验证 - 如何使其不区分大小写

时间:2011-11-20 22:20:20

标签: codeigniter codeigniter-2

我正在使用Code Igniter 2,以下代码不会在用户输入相同电子邮件地址但不同情况下验证,例如:email@bob.com和Email@bob.com 我希望这可以验证它是否是相同的电子邮件,即使用户使用了不同的情况。

$this->form_validation->set_rules('password', 'Password', 'required|trim|xss_clean');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim');

if ($this->form_validation->run() == FALSE)
{

    $this->load->view('login_view', $data);
}
else
{

3 个答案:

答案 0 :(得分:2)

任何接受一个参数的PHP函数都可以在验证类中使用。

来自the manual

  

任何接受一个参数的本机PHP函数都可以用作   规则,如htmlspecialchars,trim,MD5等。

这意味着您可以将验证规则修改为

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|strtolower|trim');

请注意在规则中使用strtolower()功能。

答案 1 :(得分:0)

您需要在控制器内创建一个回调函数:

function valid_case_insensitive_email($str){
    $str = strtolower($str)
    return $this->form_validation->valid_email($str)
}

然后将set_rules修改为此

$this->form_validation->set_rules('email', 'Email', 'required|callback_valid_case_insensitive_email|trim');

或者,您可以扩展form_validation类并覆盖valid_email函数。

答案 2 :(得分:0)

这样做:

$this->form_validation->set_rules('email', 'Email', 'required|callback__check_email');

//then the callback function

function _check_email() {
  $email = strtolower($this->input->post("email");
  $email = trim($email);
  return $this->form_validation->valid_email($email);
}

希望有所帮助