2011-10-10 99 views
1

我想我在這裏面臨一個悖論。處理電話號碼格式

我想要做的,當我接收/撥打電話,我有多少,所以我需要知道,如果它的國際電話號碼,如果一個本地號碼等

的問題是是:

  1. 對於我知道,如果一個號碼是國際性的,我需要解析,並檢查它的長度,但長度不同,從國家到國家,所以,我應該做的分析和識別的方法各國? (在我看來不起作用);
  2. 對於我來說,如果它是一個本地號碼,我需要區號,所以我必須做同樣的事情,解析號碼並檢查長度,根據區號長度得到第一個號碼;

它很難找到解決方案。圖書館libphonenumber提供了很多有用的類,但我認爲可以幫助我的那個類,把我帶到另一個悖論。

phoneUtil.parse(number,countryAcronym)方法返回帶有國家代碼的號碼,但是它的功能是,如果我通過帶有首字母縮寫詞「US」的號碼返回國家代碼爲'1'的號碼,現在如果我將首字母縮寫詞改爲「BR」,它會更改數字並返回巴西的國家代碼「55」。所以,無論如何,我需要根據我得到的數字來確定國家的首字母縮略詞。

EX:

numberReturned = phoneUtil.parse(phoneNumber, "US"); 
phoneUtil.format(numberReturned, PhoneNumberFormat.INTERNATIONAL); 

上面的代碼,返回數字與美國的國家代碼,但現在如果我改變「美國的」任何其他國家的首字母縮寫,將返回相同的號碼,但與國家代碼那個國家。

我知道這LIB不應該猜測哪個國家的數量是(這將是真棒!),但多數民衆贊成我需要什麼。

這真的讓我的頭腦變得瘋狂。我需要來自SO的明智的法師的好建議。

如果你能幫我做出一個好決定,我會非常感激。

謝謝。


PS:如果您已經使用libphonenumber,並與此更多的經驗,請指導我使用哪一類,如果有一個能夠解決這個問題。 =)

回答

0

1)phoneUtil.parse第二個參數必須目前在你是國相匹配- 如果收到的電話號碼,不包括國際前綴,它的使用。這就是爲什麼當你改變參數時你會得到不同的結果:你傳遞的電話號碼不包含這樣的前綴,所以它只是使用你所說的。

任何分析解決方案套件,以確定該電話號碼是國際的還是國內將需要意識到這一點:根據來源,甚至一個國家的數量可能與國際撥號前綴(通常抽象爲+來表示,因爲它在國家之間有所不同,但這不能保證)。

2)對於區域碼解析,沒有通用的標準;一些國家不使用它們,甚至在一個國家內,區號可能有不同的長度(例如德國)。我不知道這個國際圖書館 - 快速搜索沒有發現任何東西(儘管這並不意味着不存在)。你可能需要在這裏推出自己的;如果你只需要支持一個國家,這應該不會太難。

+0

是的。但問題是,我必須支持幾乎所有國家。這將是很難,很多研究和思考得出一個簡單而明智的結論。一個好的方法是讓國家的數字是唯一的方法來解析這個數字呢?不管怎麼說,多謝拉。 – rogcg

+0

非常,是的。您需要檢查電話號碼字符串是以「+」開頭還是以任何適合您所在國家/地區的國際電話爲前綴的前綴 - 如果不在那裏,那麼它是全國性的。電話知道要發送哪些數字來代替+號,但我不知道如何從代碼中檢索數字。 –