有谁知道我收到此错误的原因: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;
}
}
答案 0 :(得分:0)
您使用/
作为表达式的分隔符。但是,无论如何都是完全没必要的
$parts = explode('/', $date);
更好:http://php.net/datetime.createfromformat
让您了解会发生什么:PCRE正则表达式需要在模式本身的开头和结尾处使用分隔符。第二个分隔符后的所有内容都被视为修饰符。因此,您决定使用/
作为分隔符(它始终是第一个字符),因此您的模式在/^([0-9]{2})/
之后立即结束。接下来的所有内容(首先是(
)都被视为修饰符,但(
不是现有的修饰符。
如果你想使用正则表达式,我建议使用另一个分隔符,如
~^([0-9]{2})/([0-9]{2})/([0-9]{4})$~
#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#
只需read the manual about the PCRE
-extension
另外两条评论:
$parts
33/44/5678
等日期,但拒绝1/1/1970
答案 1 :(得分:0)
如果第一个字符是例如检测到斜杠/
作为正则表达式的分隔符。因此,你的正则表达式只是部分^([0-9]{2})
。第二个斜杠之后的所有内容都被识别为正则表达式的修饰符。
如果你真的想要匹配斜杠,请使用\/
来逃避它
答案 2 :(得分:0)
由于您在正则表达式中使用斜杠,因此需要使用其他分隔符,请尝试:
preg_match ("#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#", $date, $parts)
答案 3 :(得分:0)
你需要逃避斜线,如下:
if(preg_match ("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){
答案 4 :(得分: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'));
答案 5 :(得分:0)
您可能想要考虑不使用正则表达式。
<?php
// simple example
$timestamp = strtotime('12/30/2012');
if ($timestamp) {
// valid date… Now do some magic
echo date('r', $timestamp);
}