【发布时间】:2014-12-20 06:05:58
【问题描述】:
我有一个 php 方法来检查一个 传入的参数是一个日期。就是这样:
public function is_Date($str){
if (is_numeric($str) || preg_match('^[0-9]^', $str)){
$stamp = strtotime($str);
$month = date( 'm', $stamp );
$day = date( 'd', $stamp );
$year = date( 'Y', $stamp );
return checkdate($month, $day, $year);
}
return false;
}
然后,我这样试驾:
$var = "100%";
if(is_Date($var)){
echo $var.' '.'is a date';
}
$var = "31/03/1970";
if(is_Date($var)){
echo $var.' '.'is a date';
}
$var = "31/03/2005";
if(is_Date($var)){
echo $var.' '.'is a date';
}
$var = "31/03/1985";
if(is_Date($var)){
echo $var.' '.'is a date';
}
请注意,每个 if 也有一个 else 语句,如:
else{
echo $var.' '.'is not a date'
}
输出:
100% is a Date
31/03/1970 is a Date
31/03/2005 is a Date
31/03/1985 is a Date
我的问题是,为什么 100% 显示为日期,为什么 31/03/1985 没有被读取为日期?
任何关于为什么会受到高度赞赏的线索,因为我在正则表达式方面不太专业
【问题讨论】:
-
为什么不简单检查一下:
is_numeric( strtotime($str) )? -
^[0-9]^是什么意思?