2012-11-22 45 views
0

我被賦予不可能的任務,也許?正則表達式來幫助我分解電話號碼?

我有一個電話號碼錶。但是他們是手動輸入的,而且很髒。

實施例:

0711112399 
07 1111 3288 
07 1111 4832 NIKKI 
0711117929 
0711113616X123 
0 
NULL 
1300 111 782 

(數字變更爲保護無辜者。:))

我需要打破這些進入 COUNTRYCODE AREACODE 數 擴展

所以,0711112399將成爲 COUNTRYCODE = +61(因爲有此號碼無代碼) AreaCode = 07 Number = 11112399 Extension = NULL

11113616X123將 國家+61 AREACODE = NULL 數= 11113616 延長= 123

規則:

可能區號:

這甚至可能嗎?

For 07 1111 4832 NIKKI - 我會刪除Alpha Numerics,除非它是2個數字之間的X.

回答

0

你可以試試這個

^(00\d{2}|\+\d{2})?(0\d)?([\d ]+)(?:[xX](\d+))? 

看到它here on Regexr。您可以在懸停在藍色突​​出顯示的匹配項上時查看組的內容。

它將把國家代碼放在Group1中,區域代碼放在組2中,放在組3中,放在組4中。除了數字以外,所有部分都是可選的。如果未找到零件,則該組的值未設置,則必須將其設置爲默認值。

我看到國家代碼的問題。它在這裏用2位數進行硬編碼,但我知道也有一些3位數的代碼。對於有1位數字代碼的國家,我不確定,可能是那裏有一個領先的0。但我需要知道區號/號碼何時開始。

0

我不會說不可能,但它需要嚴格的測試。但我不一定關注正則表達式。使用其他技術可能會更簡單。

這是與測試驅動開發接近的理想情況。首先列出所有可能的案例,爲每個案例編寫單元測試,並調整案例的消毒劑代碼。

0

有專門的庫來規範電話號碼,他們非常專業。但他們也傾向於依賴正則表達式。Lync Server(Microsoft的IP語音解決方案)具有依賴於正則表達式的規範化庫。他們的網頁中含有相當多的樣本,將派上用場你:

http://technet.microsoft.com/en-us/library/gg413082.aspx

最後,它可能更容易,建設一批,將歸到一個共同的格式表達式,比試圖創造一個表達來規範一切。