2013-06-19 79 views
1

我在PHP需要一個正則表達式來從電話號碼的字符串的+或0在多次刪除「+」或「0」從一個電話號碼字符串

的開頭刪除我有此功能除去每一個不數字符

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

,但我需要更好的東西,所有這些例子應該是...

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

...這樣

$sPhoneNumber = "3999999999999" 

有什麼建議,非常感謝!

+0

你想 「003999999999999」,成爲 「3999999999999」?如果這個數字合法地以0開始呢? –

+0

@mbratch這將無法正常工作。例如取這個數字:「909984302」,你的表達會導致「9998432」 – stackErr

+0

@mbratch仍然會導致同樣的事情 – stackErr

回答

1

你可以這樣做:

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

爲了去除開始+0,這應該工作

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

0

只是intval()後來刪除前導零。

3

作爲替代正則表達式,你可以使用ltrim()

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

第二個參數是一個字符字符串列表,你的情況+0

注意:這不會刪除字符串內的空格,只有+0從一開始。

0

由幾個替代的情況下就擴展您的表達:

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

http://ideone.com/fzj16b

+0

,這是不工作的「039 99999999999」,你只設置一個精確的數字零(一) ,我想要它通用 – axel

+0

@axel只需添加更多的案例,或使用'^ 0 +'而不是'^ 00'。我只是向你展示了方向。 – Tomalak

+0

我明白了@Tomalak,但我不能無限增加零,我不知道客戶有多少零可以添加,我必須防止錯誤。 – axel

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"; 
} 
相關問題