Preg_match日期/有或没有前导0

时间:2012-11-16 00:27:00

标签: php regex

当我想转换日期以便我可以将其“提供”给MySQL(mm / dd / yyyy - > yyyy-mm-dd)时,这个preg_match工作正常

$new_date = preg_replace("!([01][0-9])/([0-9]{2})/([0-9]{4})!", "$3-$1-$2", $data[$c]);

日期

04/02/2012, 12/31/2012

但是当我得到像

这样的输入时它会失败
12/1/2011, 1/4/2011

如何解决这个问题,因为我对正则表达式来说是完全没有... :(

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:1)

尝试:

!([01]?[0-9])/([0-9]{1,2})/([0-9]{4})!

第二组的{1,2}表示0-9之间的1或2位数。我还让第一部分接受1或2位数字,这样你就可以匹配3/12/2012和03/12/2012。

答案 1 :(得分:1)

尝试:

!(\d{1,2})/(\d{1,2})/(\d{4})!

\d表示数字,我认为它比[0-9]更方便,而且它们几乎相同。

答案 2 :(得分:0)

使用日期然后使用正则表达式更容易。 DateTime对象使这很容易:

$date = new DateTime('1/1/2013');
$new_date = $date->format('Y-m-d'); // Outputs 2013-01-01

答案 3 :(得分:0)

尝试:

$date = date("Y-m-d", strtotime($input));

strtotime适用于几乎任何格式。