我想要一个正则表达式来preg_match
检查日期是否在模式中DD/MM/YYYY
。我尝试了下面的代码,但没有奏效:
preg_match("#^[1-31]*1[1-12]*1[1950-2013]?#", $date);
您的正则表达式转换为:
- 从字符串的开头,
- 查找 1 到 3 范围内的任意数量的字符,或字符 1
- 寻找文字 1
- 查找 1 到 1 范围内的任意数量的字符,或字符 2
- 寻找文字 1
- 查找字符 1、9、5、0 到 2、0、1 或 3 中的一个或零
这很明显没有意义。
您无法在正则表达式中验证日期,因为日期不规则。每个月的天数、闰年和许多其他的东西你都有不同的天数。你最好将你的日期分成几部分(使用explode
)并检查它checkdate()
你的正则表达式太错误了,我什至不知道从哪里开始解释。
但最简单的答案是:不要为此使用正则表达式。PHP 已经有非常好的日期处理例程。例如,DateTime::createFromFormat()
...
$date = DateTime::createFromFormat('Y/m/d', $dateString);
echo $date->format('j-M-Y'); //outputs something like '15-Feb-2009'
您可以使用preg_match("/^\d{1,2}\/\d{1,2}\/\d{4}/",$date);
正则表达式,但它不适合此任务,因为您仍然需要执行额外的验证(例如,“9999”是有效的年份)。我认为您可能想看一下date_parse_from_format()
,例如:
date_parse_from_format('d/M/Y', $date);
有关更多信息,请参阅在 PHP 中将字符串转换为日期。