我希望在preg_match
中使用正则表达式来检查日期是否在模式DD/MM/YYYY
中。我尝试了下面的代码,但它不起作用:
preg_match("#^[1-31]*1[1-12]*1[1950-2013]?#", $date);
答案 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。