3

我需要 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"

任何建议,非常感谢!

4

6 回答 6

5

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

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

第二个参数是一个字符列表字符串,在你的情况下+0.

注意:这不会删除字符串中的空格,只会删除开头的+and 0

于 2013-06-19T15:35:02.233 回答
3

你可以这样做:

$result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber);
于 2013-06-19T15:34:02.697 回答
0

只需通过一些替代情况扩展您的表达式:

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

http://ideone.com/fzj16b

于 2013-06-19T15:39:54.730 回答
0

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

// 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";
}
于 2013-06-19T15:52:36.783 回答
0

对于删除开头+or 0,这应该有效

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

于 2013-06-19T15:34:26.570 回答
0

就在intval()之后删除前导零。

于 2013-06-19T15:34:59.923 回答