preg replace不会在php中替换

时间:2014-02-06 13:56:43

标签: php regex date preg-replace

我有这个代码来替换像这样的PHP日期中的模式

$input = preg_replace('/\/\-\.\_\s/', '-', $date);

如果我以mm/dd/yyyy的形式传递日期,preg_replace只会让我回复过去的日期

预期输出应为mm-dd-yyyy 什么可能是错的

2 个答案:

答案 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的日期/时间函数可能对你有所帮助。以下是我如何解决您的问题:

将输入日期转换为UNIX时间戳。这只是日期/时间的整数表示。

使用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应该能够处理它,并且您的代码不需要更改。