2008-11-03 39 views
13

我有一個使用電話號碼作爲唯一標識符的系統。出於這個原因,我想要格式化所有電話號碼,因爲它們使用規範化的格式。因爲我無法控制源數據,所以我需要自己解析這些數字並在將它們添加到我的數據庫之前對其進行格式化。電話號碼標準化:任何預先存在的庫?

我即將編寫一個解析器,可以讀取電話號碼並輸出標準化的電話格式,但在此之前我想知道是否有人知道我可以用來格式化電話號碼的任何預先存在的庫。

如果沒有預先存在的庫,那麼在創建此功能時應注意哪些內容可能不明顯?

儘管我的系統現在只處理美國的號碼,但我打算試圖包含對國際號碼的支持以防萬一,因爲有可能需要它。

編輯我忘了提及我正在使用C#.NET 2.0。

+0

@丹,我想如果你告訴我們你正在使用的是哪種language_,你會得到更好的答案。 :-) – 2008-11-03 15:37:07

+0

我在這個問題中添加了C#2.0標籤。 – 2008-11-03 15:42:30

回答

1

只是去掉任何非數字,可能使用正則表達式:[^\d]

,如果你要處理的擴展,區分一些沒有區號,但有3位分機唯一的例外可能是,或如果你需要處理國際號碼。

5

我目前參與OpenMoko項目,該項目正在開發完全開源的手機(包括硬件)。在規範化電話號碼方面遇到了很多麻煩。我不知道是否有人提出了一個很好的解決方案。最大的問題似乎是與美國的電話號碼,因爲有時他們在前面有1,有時沒有。根據您存儲在聯繫人列表中的內容,它可能正確顯示來電顯示信息,也可能不顯示來電顯示信息。我建議剝離電話號碼中的1(儘管我希望大多數人不會首先輸入)。您可能還需要在國際號碼前查找加號或國家代碼。

你可以檢查OpenMoko網站,郵件列表和源代碼控制,看看他們是否已經解決了這個錯誤。

0

你需要的是所有國家代碼的列表,並開始將你的字符串與國家代碼列表中的前幾個字符相匹配,以確保它是正確的,然後對於數字的其餘部分,確保它的全部數字和適當長度,通常從5-10位數變化。

要實現對國家代碼的檢查,請安裝使用網站www.geonames.orgNGeoNames nuget以獲取所有國家代碼的列表以用於與它們匹配。