6

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

这是字符串的外观:

2012 年 12 月 23 日

这就是我声明验证规则的方式:

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

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

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

错误在哪里?

编辑:

按照您的建议,我尝试使用回调函数。这是声明,位于执行表单验证的控制器类中:

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

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'
          )
     )
); 
4

1 回答 1

6

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

于 2012-12-10T17:00:08.583 回答