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; } }
这总是返回false。我使用了唯一的工具来构建正则表达式,并且在那里工作正常。当我在正则表达式中添加“ /”时,麻烦开始了。PHP似乎以某种方式要求这些,但是我不知道为什么,我也不知道为什么它破坏了我的正则表达式。
它应该返回TRUE。例如“ 2012-08-24 20:30:00”,而对于“ asdf2012-08-24 20:30:00asdf”则为FALSE,或者不符合我的正则表达式的内容
提前致谢!
-----------------------编辑感谢您的所有回答!
正如一些用户指出的那样,我的函数针对示例日期“ 2012-08-24 20:30:00”返回true。但是,只有当我手动设置$ date =‘2012-08-24 20:30:00’时,它才能执行该操作。如果我在代码的其他位置使用完全相同的字符串调用该函数,则返回false。有人知道为什么吗?
----------------------- EDIT2
是的,很抱歉浪费您的时间,实际上是在字符串中添加了一些空格。在调用我的函数之前在日期上使用trim()可以得出正确的结果。
谢谢大家!
为什么要使用正则表达式?使用DateTime类。
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 # ...