为了账号安全,请及时绑定邮箱和手机立即绑定

PHP preg_Match与工作regex

PHP preg_Match与工作regex

PHP
阿晨1998 2019-07-01 10:42:16
PHP preg_Match与工作regexfunction 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()可以得到正确的结果。谢谢大家!
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

为什么要用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')); # true

var_dump(validateDate('2012-02-30 12:12:12')); # false

var_dump(validateDate('2012-02-28', 'Y-m-d')); # true

var_dump(validateDate('28/02/2012', 'd/m/Y')); # true

var_dump(validateDate('30/02/2012', 'd/m/Y')); # false

var_dump(validateDate('14:50', 'H:i')); # true

var_dump(validateDate('14:77', 'H:i')); # false

var_dump(validateDate(14, 'H')); # true

var_dump(validateDate('14', 'H')); # true


var_dump(validateDate('2012-02-28T12:12:12+02:00', 'Y-m-d\TH:i:sP')); # true

# or

var_dump(validateDate('2012-02-28T12:12:12+02:00', DateTime::ATOM)); # true


var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', 'D, d M Y H:i:s O')); # true

# or

var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', DateTime::RSS)); # true

var_dump(validateDate('Tue, 27 Feb 2012 12:12:12 +0200', DateTime::RSS)); # false

# ...


查看完整回答
反对 回复 2019-07-01
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这应该工作得更好,并且写得更简单:

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);}


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 437 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信