preg_replace和日期

时间:2010-10-14 03:14:52

标签: php regex string preg-replace

我想删除日期字符串中的所有-/个字符。有人可以帮我一把吗?

这是我所拥有的,但它不起作用。

preg_replace('/','',$date);
preg_replace('-','',$date);

另外,有没有办法将这两个表达式组合在一起,所以我不必有2个preg_replaces?

5 个答案:

答案 0 :(得分:3)

使用$date = str_replace(aray('/','-'),'',$date);它也快得多。

答案 1 :(得分:1)

使用'translate'方法代替正则表达式。在PHP中,那将是strtr()

strtr( $date, '/-', '' );

答案 2 :(得分:0)

是的!您需要仔细查看manual$pattern的示例。

以下是使用preg_replace()的示例:

#!/usr/bin/env php
<?
$date = "2009/08/07";
echo "Before: ${date}\n";
$date = preg_replace('/[-\/]/', '', $date);
echo "After: ${date}\n";
$date = "2009-08-07";
echo "Before: ${date}\n";
$date = preg_replace('/[-\/]/', '', $date);
echo "After: ${date}\n";
?>


% ./test.php 
Before: 2009/08/07
After: 20090807
Before: 2009-08-07
After: 20090807

答案 3 :(得分:0)

我认为

[/\-]是效率最高的。

答案 4 :(得分:0)

由于您要将一个字符替换为另一个字符,因此基于正则表达式的解决方案是一种过度杀伤力。您可以使用str_replace作为:

$edited_date = str_replace(array('/','-'),'',$date);

现在你的preg_replace出了什么问题?

preg_replace期望正则表达式被一对分隔符包围。所以这应该有效:

$edited_date = preg_replace('#-#','',$date);

同样str_replacepreg_replace也接受数组,因此你可以这样做:

$from = array('#/#','#-#');
$to = '';
$edited_date = preg_replace($from,$to,$date);

此外,您可以将要删除的两个模式组合在一个正则表达式中:

$edited_date = preg_replace('#-|/#','',$date);