2009-10-06 208 views
0

爲了體面和標準化的php功能,我想將用戶輸入的字符串格式化爲std。國際電話號碼格式。 該字符串將作爲數字和+ - 符號從其他字符中剝離。所有空格將被刪除。 ,我想不同的字符串格式化爲標準格式後:格式化電話號碼

+310612345678 -> +31 (0)61 234 5678 
00310612345678 -> +31 (0)61 234 5678 

+31612345678 -> +31 (0)61 234 5678 
//add a leading zero between brackets (0)) 
0031612345678 -> +31 (0)61 234 5678 

06 12345678 -> +31 (0)61 234 5678 
//When no country code is given (no 00xx or +xx) than add the dutch one. 

這是我有媒體鏈接的功能:我在尋找一個算法來格式化不同的方式

function formatPhoneNumber($num){ 
//delete everything except digits and + 
    $number = preg_replace('/[^\d|\+]/', '', $number); 

if(substr($number,0,1) == '+' || substr($number, 0,2) == 00){ 
    // 
}else{ 
    $number = "+31".$number; 
} 

///////// 
// formatting as mentioned above 
///////// 


return $num 
} 

的用戶輸入的電話號碼爲一種格式:+31(0)61 2345678

+0

有點滑稽,Skype的Firefox插件將所有這些電話號碼轉換成一種小部件。 – 2009-10-06 10:59:56

+1

你的問題是什麼?您是否在尋找代表電話號碼的標準(在這裏回答:http://www.itu.int/rec/T-REC-E.123-200102-I/e)?你是否正在用正則表達式來轉換字符串到另一個字符串?你在尋找一種算法嗎? – mouviciel 2009-10-06 11:43:39

+0

我的確在尋找一種算法將這些不同的數字轉換成一種格式。 – blub 2009-10-06 12:53:32

回答

3

我不確定有一個真正的國際標準是否超出了國家代碼的前綴。有關國際電話號碼格式的示例,請參閱here。格式會根據國家和類型而改變。

例如在英國,我們的固定電話有+44(0)20 1234 1234,手機有+44(0)7700 123456。

因此,如果你想正確地做到這一點,我認爲你需要識別國家代碼,然後插入一個國家特定的格式化程序。

+0

謝謝。我都準備知道不同的國家有不同的格式選項。雖然最終我想實現它,但現在我正在尋找一種將用戶輸入字符串重新格式化爲以下格式的好方法:+31(0)61 234 5678;一個標準在這裏接受:) – blub 2009-10-06 11:06:17

3

我已經在當下這個沒有最終的解決方案,但想指出的一些困難,如果你不想分析荷蘭唯一的數字:

  • 你要知道所有的國際前綴(有些是像北美一個+1的一位數字,有些像荷蘭的一個+31這樣是兩位數字,有些像捷克的一個+420那樣是三位數字),如果國家代碼和區域之間沒有空格代碼,你不能簡單地在你的格式中確定空間的正確位置。

  • 此外,您不能自動假定區域代碼中的前導零是多餘的。在意大利等一些國家,甚至在國際電話中也必須使用領先的零,即如果你想從荷蘭打電話米蘭NUMER 02 123456你必須調用+39 02 123456而不是+39 2 123456

所以,它不只是寫一個短格式算法,但相當在意瞭解不同國家的不同號碼格式和用途。

當然,您可以將荷蘭數字(我假設您完全知道並瞭解荷蘭的電話號碼格式)轉換爲所描述的格式,並通過刪除任何類型的空格並將其替換爲前導「00」一個「+」 - 如果你不想快速和骯髒的解決方案,你有很多工作要做。

+0

該死的有更多的問題比我預先認爲會有更多的問題。 – blub 2009-10-06 13:11:57

1

這很有趣,因爲它不是在荷蘭設置格式化荷蘭手機號碼的標準方式(全部以06開頭)。

你應該只寫這個測試驅動。有很多有趣的案例需要報道,這樣你至少可以展示你做什麼以及不做什麼轉換。

+0

這是我personnaly添加的第一個標準化。前綴/地區代碼總是由3位數字組成:043(maastricht),06x(移動),047(5)roermond。 – blub 2009-10-06 13:42:32

+0

荷蘭用戶不喜歡!一張快速的名片掃描顯示,85人中只有6人這樣做。 – 2009-10-07 13:44:44

+0

我已經恢復了它;即使我自己也不習慣他的符號:) – blub 2009-10-18 10:23:17