我有这个代码来替换像这样的PHP日期中的模式
$input = preg_replace('/\/\-\.\_\s/', '-', $date);
如果我以mm/dd/yyyy
的形式传递日期,preg_replace只会让我回复过去的日期
预期输出应为mm-dd-yyyy
什么可能是错的
答案 0 :(得分:4)
您要用-
替换的字符集属于[]
个字符类。在那里,.
不需要转义。
$out = preg_replace('#[/._\s]#', '-', $date);
当您将/
作为预期字符之一处理时,建议使用其他字符,例如#
作为分隔符。
$date = '01/02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
$date = '01.02.2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
// Or mixed...
$date = '01 02/2013';
echo preg_replace('#[/._\s]#', '-', $date);
// 01-02-2013
在您的尝试中,不使用字符类[]
会导致您的表达式逐字地预期字符/-._\s
。
答案 1 :(得分:1)
你可能会开始使用正则表达式,在这种情况下你可以忽略我的答案。但是如果你想改进你作为程序员的工具集,那么花一些时间学习PHP的日期/时间函数可能对你有所帮助。以下是我如何解决您的问题:
使用PHP的strtotime
函数执行此操作(documentation here)。它将“关于任何英文文本日期时间描述转换为Unix时间戳。”
$timestamp = strtotime('02/06/2014');
使用PHP的date
函数执行此操作(documentation here)。这是一个非常多功能和有用的功能。
$properly_formatted_date = date('m-d-Y', $timestamp);
print $properly_formatted_date;
当然,此解决方案不使用正则表达式。但是,我不相信你的问题需要正规表达。事实上,如果您的输入发生变化(可能原始日期的格式不再是mm/dd/yyyy
,而是yyyy-mm-dd
),则需要更改正则表达式。但是strtotime
应该能够处理它,并且您的代码不需要更改。