我希望日期的PHP模式为DD / MM / YYYY

时间:2012-09-03 21:55:31

标签: php regex

我希望在preg_match中使用正则表达式来检查日期是否在模式DD/MM/YYYY中。我尝试了下面的代码,但它不起作用:

preg_match("#^[1-31]*1[1-12]*1[1950-2013]?#", $date);

3 个答案:

答案 0 :(得分:4)

你的正则表达式转换为:

  
      
  • 从字符串的开头
  •   
  • 查找范围1到3或字符1
  • 中的任意数量的字符   
  • 寻找文字1
  •   
  • 查找1到1范围内的任意数量的字符,或字符2
  •   
  • 寻找文字1
  •   
  • 查找字符1,9或5,0到2,0,1或3中的一个或零个
  •   

这显然没有意义。

您无法验证正则表达式中的日期,因为日期不是常规日期。你每个月都有不同的天数,闰年和其他一些东西。最好将日期分成几部分(使用explode)并将其与checkdate()一起检查

答案 1 :(得分:1)

你的正则表达式是错的,我甚至不知道从哪里开始解释。

但最简单的答案是:不要使用正则表达式。 PHP已经完美地完成了日期处理程序。例如,DateTime::createFromFormat() ...

$date = DateTime::createFromFormat('Y/m/d', $dateString);
echo $date->format('j-M-Y');  //outputs something like '15-Feb-2009'

请参阅http://www.php.net/manual/en/datetime.createfromformat.php

答案 2 :(得分:1)

您可以使用preg_match("/^\d{1,2}\/\d{1,2}\/\d{4}/",$date);,但正则表达式不适合此任务,因为您仍需要执行其他验证(例如,“9999”是有效年份)。我想你可能想看看date_parse_from_format(),如:

date_parse_from_format('d/M/Y', $date);

有关详细信息,请参阅Convert String To date in PHP