如何删除首字母(左侧)"+"或“0”;从一个电话号码串


How to remove initial (on the left) "+" or "0" from a telephone number string?

我需要一个PHP中的正则表达式来从电话号码字符串中删除数字开头的+或0。

我有这个函数来删除所有非数字字符

ereg_replace("[^0-9]", "", $sPhoneNumber)

但是我需要一些更好的东西,所有这些例子应该是…

$sPhoneNumber = "+3999999999999"
$sPhoneNumber = "003999999999999"
$sPhoneNumber = "3999999999999"
$sPhoneNumber = "39 99999999999"
$sPhoneNumber = "+ 39 999 99999999"
$sPhoneNumber = "0039 99999999999"

…这样的

$sPhoneNumber = "3999999999999"

有任何建议,非常感谢!

作为正则表达式的替代,您可以使用ltrim():

echo ltrim('003999999999999', '+0');

第二个参数是一个字符列表字符串,在您的例子中是+0

注意:这将不删除字符串中的空白,只从开始的+0

你可以这样做:

$result = preg_replace('~^[0'D]++|'D++~', '', $sPhoneNumber);

intval()后面去掉前导零

对于删除开头的+0,这应该可以工作

ereg_replace('^('+|0)+?', '', $sPhoneNumber);

只需将表达式扩展为几种不同的情况:

ereg_replace("^'+|^00|[^0-9]", "", $sPhoneNumber)

见http://ideone.com/fzj16b

老实说,你根本不需要正则表达式。这里也有一个干净的解决方案。

// first remove spaces
// trim + and 0 characters at the beginning
ltrim(str_replace(' ', '', $sPhoneNumber), '+0');
这是我的测试代码
<?php
$sPhoneNumber[0] = "+3999999999999";
$sPhoneNumber[1] = "003999999999999";
$sPhoneNumber[2] = "3999999999999";
$sPhoneNumber[3] = "39 99999999999";
$sPhoneNumber[4] = "+ 39 999 99999999";
$sPhoneNumber[5] = "0039 99999999999";
foreach ($sPhoneNumber as $number) {
    $outcome = ltrim(str_replace(' ', '', $number), '+0');
    echo $number . ':' . "'t" . $outcome . '(' . ($outcome === '3999999999999' ? 'true' : 'false') . ')' . "'n";
}