Php 预匹配日期/带或不带前导0
当我想转换一个日期,以便将其“馈送”到MySQL(mm/dd/yyyy->yyyy-mm-dd)时,这种预匹配可以很好地工作Php 预匹配日期/带或不带前导0,php,regex,Php,Regex,当我想转换一个日期,以便将其“馈送”到MySQL(mm/dd/yyyy->yyyy-mm-dd)时,这种预匹配可以很好地工作 $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 如何修复它,因为我对regex完全没有兴趣…:( 非常
$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
如何修复它,因为我对regex完全没有兴趣…:(
非常感谢您的帮助。试试:
!([01]?[0-9])/([0-9]{1,2})/([0-9]{4})!
$date = date("Y-m-d", strtotime($input));
第二组上的
{1,2}
表示0-9之间的1或2个数字。我还使第一部分接受1或2个数字,以便您可以匹配2012年12月3日和2012年12月3日。只需处理日期,然后使用正则表达式就更容易了。该对象使这变得简单:
$date = new DateTime('1/1/2013');
$new_date = $date->format('Y-m-d'); // Outputs 2013-01-01
尝试:
\d
表示一个数字,我认为它比[0-9]
更方便,它们几乎是等价的。试试:
!([01]?[0-9])/([0-9]{1,2})/([0-9]{4})!
$date = date("Y-m-d", strtotime($input));
几乎可以使用任何格式。它如何知道哪个是mm或dd 1st或2nd?我想他是指构造函数中的。kk谢谢……但在这种情况下,脚本中的原因已经是正则表达式,因此我可以简单地交换模式,而不必更改smth elseThanks来解释:D我认为我应该学习正则表达式,因为我认为我我以后会更经常地需要它们来验证用户输入查看www.regular-expressions.info,这是一个很好的学习网站。下面是php.net的参考资料,其中介绍了一些关于正则表达式、修饰符和模式的基础知识。