日期验证的正则表达式帮助 - mm-dd-yyyy - PHP

时间:2013-10-22 11:01:04

标签: php regex

 if(preg_match('/^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}$/', '10-30-2013')){
   echo 'true';
}
else {
   echo 'false';
}

这不是真的。我认为regex我错了。请告诉我们如何更正regex

3 个答案:

答案 0 :(得分:2)

我建议不要使用正则表达式 - 使用正则表达式进行日期验证是一个非常困难的事情,因为任何给定月份的天数可能会有变化。

更好的方法是简单地使用PHP的DateTime类来实际将其解析为日期对象。这也将验证它;如果它不符合指定的格式,那么它将不会解析。

$dateObj = DateTime::CreateFromFormat('m-d-Y',$inputString);

请参阅CreateFromFormat()的PHP手册页。

答案 1 :(得分:1)

您应该使用专用函数来解析日期,即:

if (strptime ('10-30-2013'  , 'm-d-Y') !== false) {
  echo 'true'.PHP_EOL;
} else {
  echo 'true'.PHP_EOL;
}

答案 2 :(得分:0)

实际上,正如其他人所确认的那样,你的正则表达式正常并返回true

但是当你使你的代码缩小时,我认为你试图向我们展示的输入字符串不是完全只是date并且它在一个字符串内或者可能有尾随空格!

因此,在正则表达式中使用^$会导致失败。