php - CodeIgniter form_validation 中的 regex_match 生成 : Message: preg_match(): No ending delimiter '/' found

标签 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}$/]

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

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

哪里出错了?

编辑:

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

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

最佳答案

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

关于php - CodeIgniter form_validation 中的 regex_match 生成 : Message: preg_match(): No ending delimiter '/' found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13804721/

相关文章:

PHP 代码忽略日

php - 如果我们在代码文件中添加太多注释,PHP 会变慢吗?

java - 匹配字符串结尾但不匹配换行符?

php - 我应该如何创建一个总是超时的测试资源

javascript - X 和 Y 坐标的简单笛卡尔平面,原点位于中心

javascript - 如何在正则表达式中从右侧跟踪字符串?

java - 正则表达式在java中查找URL中的编码字符串

php - 路由到 Controller

php - 从 MySQL 返回结果时的数字顺序

javascript - AJAX/JQUERY 似乎无法删除数据