php – is_date()发生故障

我有一个 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'; 
}

请注意,每个ifs还有一个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不被视为日期?

关于为什么的任何线索将受到高度赞赏,因为我不是在Regex的专业知识

你正在使用^在正则表达式字符串的末尾,^的含义是比较字符串的开头.

另外,正如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)));
}

Documentation says:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the varIoUs components: if the separator is a slash (/),then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.),then the European d-m-y format is assumed.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...