我在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]');
该行中的正则表达式与我提到的正则表达式不同。
尝试复制和粘贴相同的正则表达式时,它不起作用。我知道这是愚蠢的我似乎无法完全理解正则表达式。
答案 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.}]
这样管道正则表达式不会崩溃