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

Replacing all non numeric characters with a single character

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

进入这个:98-221-99

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

这是我使用的代码:

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

这个的输出是:82--991

我需要它是:82-991

有什么办法吗?

您可以使用 quantifier,而不是在 preg_replace() 之后调用 str_replace()+ 量词告诉正则表达式引擎匹配前面的标记 "one or more" 次。

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