Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未知修饰符';(';与正则表达式一起使用preg_match()时_Php_Regex - Fatal编程技术网

Php 未知修饰符';(';与正则表达式一起使用preg_match()时

Php 未知修饰符';(';与正则表达式一起使用preg_match()时,php,regex,Php,Regex,我正在尝试使用preg_match()用PHP验证DD/MM/YYYY之类的日期。这是我的正则表达式的样子: $pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$/"; 但如果使用正确的值,我会得到以下信息: preg_match():未知修饰符'(' 完整代码: $pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{

我正在尝试使用preg_match()用PHP验证DD/MM/YYYY之类的日期。这是我的正则表达式的样子:

$pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$/";
但如果使用正确的值,我会得到以下信息:

preg_match():未知修饰符'('

完整代码:

    $pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$/";
    $date = "01/03/2011";

    if(preg_match($pattern, $date)) return TRUE;

提前谢谢

将表达式中的
/
字符转义为
\/

$pattern = "/^([123]0|[012][1-9]|31)\/(0[1-9]|1[012])\/(19[0-9]{2}|2[0-9]{3})$/";

正如其他答案所指出的,最好使用表达式中未使用的另一个分隔符,例如
~
,以避免“倾斜牙签”效应,使其更难阅读。

您的分隔符是/,但您正在图案本身内部使用它。
使用不同的分隔符,或转义/

您可以按照建议转义斜杠
/
。不过,这最终会导致错误

通常使用不同的分隔符来保持正则表达式的干净:

// Using "=" as delimiter
preg_match('=^ ... / ... $=', $input);

您可以使用
/
作为分隔符,也可以在表达式中使用。现在

/^([123]0|[012][1-9]|31)/
是“complete”表达式,以下所有内容都应作为修饰符,同时也是

您可以简单地使用另一个分隔符

~^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$~

或者,您可以跳过表达式中所有出现的
/
,但我更喜欢另一个分隔符;)它更可读。

使用下面的函数检查日期

 function checkDateFormat($date)
    {
      //match the format of the date
      if (preg_match ("/^([0-9]{2}) \/([0-9]{2})\/([0-9]{4})$/", $date, $parts))
      {
        //check weather the date is valid of not
        if(checkdate($parts[2],$parts[1],$parts[3]))
          return true;
        else
         return false;
      }
      else
        return false;
    }

echo checkDateFormat("29/02/2008"); //return true
echo checkDateFormat("29/02/2007"); //return false