您应该可以使用以下正则表达式来做到这一点:
[^0-9+]
在preg_replace()
:
$nn = preg_replace('/[^0-9+]/', '', $string);
您当前的正则表达式还保留一个正斜杠,因此要保留该功能:
$nn = preg_replace('/[^0-9\/+]/', '', $string);
带输出的示例代码:
<?php
$string = '+27 (15) 234-2634';
$nn = preg_replace("/[^0-9+]/", "", $string );
echo $nn . "\n";
?>
结果是:
+27152342634
更新(只保留第一个匹配+
)
根据您最新的问题更新,您也只想保留找到的第一个 +
符号。为此,由于可能没有关于第一个符号位置的“规则”(例如“它必须是字符串中的第一个字符),我建议使用其他方法,而不仅仅是preg_replace()
:
$nn = preg_replace("/[^0-9+]/", "", $string);
if (substr_count($nn, '+') > 1) {
$firstPlus = strpos($nn, '+') + 1;
$nn = substr($nn, 0, $firstPlus) . str_replace('+', '', substr($nn, $firstPlus));
}
此代码将正常执行原始代码preg_replace()
,然后,如果结果中有超过 1 个+
符号,它将获取结果的子字符串,直到第一个+
,然后执行字符串替换以替换所有剩余的+
符号。preg_replace()
您也可以在这里始终使用第二个,但仅删除一个+
符号将是矫枉过正。
这是示例的键盘条目。