用单个字符替换所有非数字字符

时间:2015-04-02 02:48:36

标签: php regex str-replace

我需要能够像这样转换字符串:98 $#221 $$ 99

进入:98-221-99

我在下面使用的代码替换了所有非数字字符,但它会单独替换它们。我需要它只用一个连字符替换它。

以下是我正在使用的代码:

$number = '82#$991';
$number = preg_replace("/[^0-9]/", " ", $number);
$number = str_replace(" ", "-", $number);

这个输出是:82--991

我需要它:82-991

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以使用quantifier,而不是在str_replace()之后调用preg_replace()+量词告诉正则表达式引擎匹配前面的令牌"一个或多个"次。

$number = '98$#221$$99';
$number = preg_replace('/[^0-9]+/', '-', $number);
echo $number; //=> "98-221-99"