CodeIgniter中的regex_match form_validation生成:消息:preg_match():找不到结束分隔符'/'

Lui*_*tin 6 php regex codeigniter

我一直在寻找其他类似的帖子,问题似乎是一个未转义的斜线.但是我逃避了他们.

这是字符串的外观:

23/12/2012

这就是我宣布验证规则的方式:

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)[0-9]{2}$/]
Run Code Online (Sandbox Code Playgroud)

结束分隔符在那里,日期的两个中间斜杠用反斜杠进行转义.我也试过这个略有不同,但我得到了同样的错误:

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/]
Run Code Online (Sandbox Code Playgroud)

哪里出错?

编辑:

根据您的建议,我尝试使用回调函数.这是声明,它位于正在执行表单验证的控制器类中:

function mach_date($date) {
   /* DEBUG */ echo 'Here I am!'; exit; // execution should stop here displaying the echo
   return (bool)preg_match('/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/', $date);
}
Run Code Online (Sandbox Code Playgroud)

application/config/form_validation.php中的验证规则:

$config = array(
     // other validation groups.....,
     'articles' => array(
          // other validated fields.....,
          array(
                'field' => 'date_p',
                'label' => 'Publishing date',
                'rules' => 'callback_match_date'
          )
     )
); 
Run Code Online (Sandbox Code Playgroud)

cry*_*c ツ 6

设置验证规则时,请用|分隔它们 所以你的正则表达式中的| s导致验证规则在那些分裂并导致错误.讨论这里的问题.它似乎是codeigniter中的限制或错误.您可以通过运行带有和没有|的正则表达式来测试它,并查看管道的使用是否会导致错误.如果是这种情况,那么你可能必须通过其他方法通过正则表达式进行验证,也许使用一个回调函数,详细信息在这个页面上,你的函数将使用当然需要在函数内部的正则表达式执行preg_match,然后返回true /假.