Codeigniter's regex match

codeigniter, php, regex, validation

Solution

Though there is no `regex_match()` method in CodeIgniter validation library, It's not listed in the CI User Guide.

Per @Limon's comment:

There is a bug in CodeIgniter with the pipe `|`, it breaks the regex.

CodeIgniter uses `|` as a separator between validate methods.

Therefore, to prevent from breaking the regex, you could create a callback method in your Controller to validate the input by matching the regex:

public function regex_check($str)
{
    if (preg_match("/^(?:'[A-Za-z](([\._\-][A-Za-z0-9])|[A-Za-z0-9])*[a-z0-9_]*')$/", $str))
    {
        $this->form_validation->set_message('regex_check', 'The %s field is not valid!');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

Then add the validation rule, as follows:

$this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[2]|max_length[15]|callback_regex_check|is_unique[user.username]');

Problem

I have this regular expression for validation in javascript: ``` /^(?:'[A-z](([\._\-][A-z0-9])|[A-z0-9])*[a-z0-9_]*')$/ ``` Now I want the same regular expression for the form validation using Codeigniter's form validation: ``` $this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[2]|max_length[15]|regex_match[/^[A-Z a-z 0-9 _ . \-]+$/]|is_unique[user.username]'); ``` the regex in that line is not equivalent to the one I mentioned. When trying to copy and paste same regex, It doesn't work. I know this is dumb i just can't seem to fully understand regular expressions.

Original source

Related problems