Codeigniter的正则表达式匹配

时间:2014-01-29 18:42:19

标签: php regex codeigniter validation

我在javascript中有这个正则表达式进行验证:

/^(?:'[A-z](([\._\-][A-z0-9])|[A-z0-9])*[a-z0-9_]*')$/

现在我想要使用Codeigniter的表单验证进行表单验证的相同正则表达式:

$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]');

该行中的正则表达式与我提到的正则表达式不同。

尝试复制和粘贴相同的正则表达式时,它不起作用。我知道这是愚蠢的我似乎无法完全理解正则表达式。

2 个答案:

答案 0 :(得分:5)

虽然CodeIgniter regex_match()中有没有 validation library方法,但它未在CI用户指南中列出。

根据@Limon的评论:

  

CodeIgniter中有一个带有管道|的错误,它会破坏正则表达式。

CodeIgniter uses |作为验证方法之间的分隔符。

因此,为防止破坏正则表达式,您可以在Controller中创建callback method以通过匹配正则表达式来验证输入:

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;
    }
}

然后添加验证规则,如下所示:

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

答案 1 :(得分:-1)

您可以将规则作为数组提供:

set x 2.
set columnLine [subst -nobackslashes -nocommands {$x 5. 10. 15.}]

这样管道正则表达式不会崩溃