0

有谁知道为什么我会收到此错误:preg_match() [function.preg-match]: Unknown modifier '(' 使用此方法:

function checkFBDateFormat($date) {
    if(preg_match ("/^([0-9]{2})/([0-9]{2})/([0-9]{4})$/", $date, $parts)){
        if(checkdate($parts[2],$parts[1],$parts[3]))
            return true;
        else
            return false;
    } else {
        return false;
    }
}
4

6 回答 6

0

您可能要考虑根本不使用正则表达式。

<?php
// simple example
$timestamp = strtotime('12/30/2012');
if ($timestamp) {
    // valid date… Now do some magic
    echo date('r', $timestamp);
}
于 2012-09-19T11:48:48.097 回答
0

You need to escape your slash, like so:

if(preg_match ("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){
于 2012-09-19T11:14:55.350 回答
0

你没有逃避你的“/”,你也没有完成你的 if 语句,请试试这个:

        function checkFBDateFormat($date) {
        if(preg_match("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){
            if(checkdate($parts[2],$parts[1],$parts[3])) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

echo var_dump(checkFBDateFormat('08/09/2012'));
于 2012-09-19T11:24:26.320 回答
0

您将/其用作表达式的分隔符。但是,无论如何它是完全没有必要的

$parts = explode('/', $date);

更好的是:http: //php.net/datetime.createfromformat

为了让您了解会发生什么:PCRE 正则表达式在模式本身的开头和结尾需要一个分隔符。第二个分隔符之后的所有内容都被视为修饰符。因此,您决定使用/分隔符(它始终是第一个字符),因此您的模式在/^([0-9]{2})/. 接下来的所有内容((起初是 a)都被视为修饰符,但(不是现有的修饰符。

如果您想保留正则表达式,我建议使用另一个分隔符,例如

~^([0-9]{2})/([0-9]{2})/([0-9]{4})$~
#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#

只需阅读有关PCRE-extension的手册

两个额外的评论:

  • 您应该$parts在使用它之前定义 ,
  • 请记住,该表达式是非常不准确的,因为它允许日期为33/44/5678,但拒绝1/1/1970
于 2012-09-19T11:09:22.850 回答
0

If the first char is e.g. an slash / is detected as delimiter fro the regular expression. Thus your regex is only the part ^([0-9]{2}). And everything after the second slash is recognized as modifiers for the regex.

If you really want to match a slash, use \/ to escape it

于 2012-09-19T11:09:59.310 回答
0

Since you are using slash in regular expression, need use other delimiter, try:

preg_match ("#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#", $date, $parts)
于 2012-09-19T11:10:59.083 回答