日期()发生故障
我有一个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'
}
OUTPUT:
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
不作为日期?
任何线索,为什么会高度赞赏,因为我不是在正则表达式太专业
在正则表达式字符串的末尾使用^
, ^
含义是比较字符串的开头。
另外,正如hjpotter92所建议的那样,您可以简单地使用is_numeric(strtotime($str))
你的功能应该如下所示:
public function is_Date($str){
$str=str_replace('/', '-', $str); //see explanation below for this replacement
return is_numeric(strtotime($str)));
}
文档说:
m / d / y或dmy格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线(/),则假定美国m / d / y ; 而如果分隔符是破折号( - )或点(。),则假定欧洲的dmy格式。
我现在就开始工作了! 新输出已停止显示100%作为日期,这正是我计划的。最终的代码sippette可以完成这项工作:
public function is_Date($str){
$str = str_replace('/', '-', $str);
$stamp = strtotime($str);
if (is_numeric($stamp)){
$month = date( 'm', $stamp );
$day = date( 'd', $stamp );
$year = date( 'Y', $stamp );
return checkdate($month, $day, $year);
}
return false;
}
echo a million thanks to you all ! you guys are the best !
链接地址: http://www.djcxy.com/p/23905.html