日期()发生故障

我有一个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 / ydmy格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线(/),则假定美国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

上一篇: date() is malfunctioning

下一篇: UiSegmentedControl on NavigationBar below Title