【问题标题】:regex_match in CodeIgniter form_validation generates: Message: preg_match(): No ending delimiter '/' foundCodeIgniter form_validation 中的 regex_match 生成:消息:preg_match():未找到结束分隔符 '/'
【发布时间】:2012-12-10 16:13:29
【问题描述】:

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

字符串应该是这样的:

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

【问题讨论】:

  • 能否多贴一些问题代码本身
  • @JulienMay 我已经添加了有关该问题的更多信息

标签: php regex codeigniter


【解决方案1】:

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

【讨论】:

  • 我明白了,谢谢你的信息。现在我正在尝试使用回调,但是由于我的规则是在 config/form_validation.php 而不是在同一个控制器中实现的,因此由于某种原因它没有被调用。我已将回调放在控制器中,并在其位于 application/core 目录中的父控制器中进行了尝试。但是回调没有被执行。
  • 您能否在问题中发布回调函数和代码,以便我了解它是如何完成的。还请指定每个文件和类的位置。
  • 移除退出;请通过在页面的 HTML 中查找 echo 的输出来查看 echo 是否打印出来。此外,您应该将该函数放在帮助文件中。
  • 大错特错!这只是一个拼写错误。我将函数声明为没有 t 的 mach_date()。该方法最终很好地放置在控制器类中。无论如何,这还没有结束。我必须将其声明为公开,以便可以从请求 URL 访问它。我将不得不重新路由它。
  • 我想知道为什么我的正则表达式不起作用。我有数百万个管道……现在我知道为什么了。谢谢!
猜你喜欢
  • 2015-12-24
  • 1970-01-01
  • 2013-09-12
  • 2016-12-07
  • 2012-03-30
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多