PHP preg_Match与工作regex

PHP preg_Match与工作regex

function validateDate( $date ){ 
    echo $date;
    //2012-08-24 20:30:00
    if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1)
    {
        return true;
    }
    else
    {
        return false;
    }}

这总是返回假的。我使用了一个惟一的工具来构建正则表达式,它在那里运行得很好。当我将“/”添加到正则表达式时,麻烦就开始了。不知怎么的,PHP似乎需要这些,但我不知道为什么,也不知道为什么它破坏了我的正则表达式。

对于某事物,它应该是真实的。比如“2012-08-24 20:30:00”和“asdf 2012-08-24 20:30 asdf”或任何与我的裁判无关的事。

提前谢谢!

正如一些用户指出的那样,我的函数为示例日期“2012-08-24 20:30:00”返回true。但是,只有当我手动设置$Date=‘2012-08-24 20:30:00’时才会这样做。如果我用完全相同的字符串调用代码中的其他地方的函数,它将返回false。有人知道为什么吗?

是的,很抱歉浪费了你的时间,实际上是一些空格被添加到字符串中。在调用函数之前,在我的日期上使用TRIM()可以得到正确的结果。

谢谢大家!


阿晨1998
浏览 467回答 3
3回答

动漫人物

为什么要用regex?使用日期时间班级,等级。function validateDate($date, $format = 'Y-m-d H:i:s'){    $d = DateTime::createFromFormat($format, $date);    return $d && $d->format($format) == $date;}您可以在所有类型的日期/时间验证中使用此函数。例子:var_dump(validateDate('2012-02-28 12:12:12')); # truevar_dump(validateDate('2012-02-30 12:12:12')); # falsevar_dump(validateDate('2012-02-28', 'Y-m-d')); # truevar_dump(validateDate('28/02/2012', 'd/m/Y')); # truevar_dump(validateDate('30/02/2012', 'd/m/Y')); # falsevar_dump(validateDate('14:50', 'H:i')); # truevar_dump(validateDate('14:77', 'H:i')); # falsevar_dump(validateDate(14, 'H')); # truevar_dump(validateDate('14', 'H')); # truevar_dump(validateDate('2012-02-28T12:12:12+02:00', 'Y-m-d\TH:i:sP')); # true# orvar_dump(validateDate('2012-02-28T12:12:12+02:00', DateTime::ATOM)); # truevar_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', 'D, d M Y H:i:s O')); # true# orvar_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', DateTime::RSS)); # truevar_dump(validateDate('Tue, 27 Feb 2012 12:12:12 +0200', DateTime::RSS)); # false# ...

繁华开满天机

这应该工作得更好,并且写得更简单:function validateDate($date){   return preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date);}但是,它将返回true与9999-99-99 29:59:59就像其他人提到的.。从PHP手册中,您可以很容易地找到更优雅和可靠的解决方案,例如(灵感来自本评论):function validateDate($data){     return (date('Y-m-d H:i:s', strtotime($data)) == $data);}
打开App,查看更多内容
随时随地看视频慕课网APP