Google的常見Java,C ++和JavaScript庫,用於解析,格式化和驗證國際電話號碼。 Java版本已針對在智能手機上運行而進行了優化,自4.0(冰淇淋三明治)以來,Android Framework使用。
README
。getNumberType
根據數字本身獲取數字的類型;能夠區分固定線,移動,免費電話,高級費率,共享成本,VoIP,個人數字,UAN,PAGER和語音郵件(只要可行時)。isNumberMatch
對兩個數字是否相同,獲得了信心水平。getExampleNumber
和getExampleNumberForType
為所有國家/地區提供有效的示例號,並可以選擇指定需要哪種類型的示例電話號碼。isPossibleNumber
快速猜測一個數字是否僅使用長度信息,比完整驗證快得多。isValidNumber
使用長度和前綴信息對區域的電話號碼進行全面驗證。AsYouTypeFormatter
用戶輸入每個數字時,正式格式化電話號碼。findNumbers
在文本中找到數字。PhoneNumberOfflineGeocoder
提供與電話號碼相關的地理信息。PhoneNumberToCarrierMapper
提供與電話號碼相關的運營商信息。PhoneNumberToTimeZonesMapper
提供與電話號碼相關的時區信息。GITHUB發布後,Java演示的更新略有延遲。
最後一個演示更新:v8.13.50。
注意:即使庫(主分支/Maven版本)在v8.12.57,由於某些部署問題,我們也無法使用新的二進製版本更新Java演示。我們很快將解決此問題。同時,請使用JS演示。
如果此數字低於最新版本的版本編號,則我們在發行版之間,並且演示可能在任何一個版本中。
此存儲庫中有一個稱為e.164 formatter的演示Android應用程序。該應用程序的目的是展示一個示例,說明如何在現實生活中使用庫,在這種情況下,特別是在使用Java的Android應用中使用庫。
JavaScript演示可以以各種標籤運行;此鏈接將帶您master
。
要將Java代碼包括在您的應用程序中,請與Maven集成(請參閱Wiki)或從Maven存儲庫中下載最新的罐子。
Javadoc會自動更新,以反映最新版本,網址為https://javadoc.io/doc/com.googlecode.libphonenumber/libphonenumber/。
我們通常按照這些準則選擇發布編號。
如果由於上一個版本以來的任何更改都將其推向掌握,與現有性LibphoneNumber API的意圖/規範不相容,或可能導致LibphoneNumber(Java,C ++或JS)客戶必須更改代碼以保持建築物,我們發布主要版本。例如,如果最後一個版本是7.7.3,則新版本將是8.0.0。
如果這些更改中的任何一個使客戶能夠更新其代碼以利用新功能,並且如果客戶將發布被標記為“不好”的情況,則必須將這些更改倒閉,我們將發布次要版本。例如,我們將從7.7.3到7.8.0。
否則,包括當版本僅包含元數據更改時,我們發布了子罰款版本,例如7.7.3至7.7.4。
有時,我們對代碼或元數據進行內部更改,儘管不影響客戶的兼容性,但可能會影響圖書館搬運工的兼容性。對於此類更改,我們向LibphoneNumber-Discuss發布了公告。此類更改不會反映在版本編號中,如果沒有其他更改,我們將發布子級版本。
想通知新版本嗎?在今年的大部分時間裡,除了假期和延長的情況外,我們兩週都會發布。我們更新發布標籤和文檔詳細發行說明。我們還向LibphoneNumber-Discuss發送了一個公告,每次發行版。
假設您有一個代表來自瑞士的電話號碼的字符串。這就是您將其解析/將其歸一化為PhoneNumber
對象的方式:
String swissNumberStr = "044 668 18 00" ;
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
try {
PhoneNumber swissNumberProto = phoneUtil . parse ( swissNumberStr , "CH" );
} catch ( NumberParseException e ) {
System . err . println ( "NumberParseException was thrown: " + e . toString ());
}
在這一點上, swissNumberProto
包含:
{
"country_code" : 41 ,
"national_number" : 446681800
}
PhoneNumber
是最初從phonenumber.proto
自動生成的類,具有必要的修改以提高效率。有關每個字段含義的詳細信息,請參閱resources/phonenumber.proto
。
現在讓我們驗證該數字是否有效:
boolean isValid = phoneUtil . isValidNumber ( swissNumberProto ); // returns true
格式化方法支持一些格式,如下所示:
// Produces "+41 44 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . INTERNATIONAL ));
// Produces "044 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . NATIONAL ));
// Produces "+41446681800"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . E164 ));
您還可以選擇以從另一個國家撥打的方式格式化數字:
// Produces "011 41 44 668 1800", the number when it is dialed in the United States.
System . out . println ( phoneUtil . formatOutOfCountryCallingNumber ( swissNumberProto , "US" ));
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
AsYouTypeFormatter formatter = phoneUtil . getAsYouTypeFormatter ( "US" );
System . out . println ( formatter . inputDigit ( '6' )); // Outputs "6"
... // Input more digits
System . out . println ( formatter . inputDigit ( '3' )); // Now outputs "650 253"
PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder . getInstance ();
// Outputs "Zurich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ENGLISH ));
// Outputs "Zürich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . GERMAN ));
// Outputs "Zurigo"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ITALIAN ));
警告:我們不提供有關電話號碼當前載體的數據,只有分配了相應範圍的原始載體。閱讀有關數字可移植性的信息。
PhoneNumber swissMobileNumber =
new PhoneNumber (). setCountryCode ( 41 ). setNationalNumber ( 798765432L );
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper . getInstance ();
// Outputs "Swisscom"
System . out . println ( carrierMapper . getNameForNumber ( swissMobileNumber , Locale . ENGLISH ));
有關如何使用庫的更多示例可以在單位測試中找到。
我們已知電話號碼庫的幾個第三方端口。如果它們對開發人員有用,我們在這里共享它們。
但是,我們強調這些端口是由LibphoneNumber項目以外的開發人員。我們不評估其質量或影響其維護過程。
我們自己版本的替代品:
Class#getResourcesAsStream
中加載元數據,並要求Android應用程序遵循Android加載的最佳實踐,以重新包裝元數據並從AssetManager#open()
自身(FAQ)中加載。如果您不想這樣做,請在https://github.com/michaelrocks/libphonenumber-android上查看端口,它確實重新包裝元數據並使用AssetManager#open()
,並且可以依賴於這些而無需這些這些客戶的特定加載優化。您還應該在https://github.com/lionscribe/libphonenumber-android上查看端口,該端口也支持地理編碼,並且只需要更改一行代碼。基於LibphoneNumber元數據的工具: