국제 전화 번호를 구문 분석, 형식화 및 검증하기위한 Google의 공통 Java, C ++ 및 JavaScript 라이브러리. Java 버전은 스마트 폰에서 실행되는 데 최적화되어 있으며 4.0 (아이스크림 샌드위치) 이후 Android 프레임 워크에서 사용됩니다.
README
s를 찾으십시오.getNumberType
숫자 자체에 따라 숫자 유형을 가져옵니다. 고정선, 모바일, 통행료, 프리미엄 요금, 공유 비용, VoIP, 개인 번호, UAN, 호출기 및 음성 메일 (가능할 때마다)을 구별 할 수 있습니다.isNumberMatch
두 숫자가 동일 할 수 있는지에 대한 신뢰 수준을 얻습니다.getExampleNumber
및 getExampleNumberForType
모든 국가/지역에 유효한 예제 번호를 제공하고 어떤 유형의 예제 전화 번호를 지정할 수있는 옵션을 제공합니다.isPossibleNumber
전체 유효성 검사보다 훨씬 빠른 길이 정보 만 사용하여 숫자가 가능한 전화 번호인지 신속하게 추측합니다.isValidNumber
길이 및 접두사 정보를 사용하는 지역의 전화 번호의 전체 유효성 검증.AsYouTypeFormatter
사용자가 각 숫자를 입력 할 때 전화 번호를 날려내어 전화 번호를 형식화합니다.findNumbers
텍스트에서 숫자를 찾습니다.PhoneNumberOfflineGeocoder
전화 번호와 관련된 지리적 정보를 제공합니다.PhoneNumberToCarrierMapper
전화 번호와 관련된 캐리어 정보를 제공합니다.PhoneNumberToTimeZonesMapper
전화 번호와 관련된 시간대 정보를 제공합니다.Java 데모는 Github 릴리스 후 약간의 지연으로 업데이트됩니다.
마지막 데모 업데이트 : v8.13.50.
참고 : 라이브러리 (Main Branch/Maven 릴리스)가 V8.12.57이지만 일부 배포 문제로 인해 새로운 바이너리 버전으로 Java 데모를 업데이트 할 수 없었습니다. 우리는 곧 이것을 고칠 것입니다. 그 동안 JS 데모를 사용하십시오.
이 숫자가 최신 릴리스의 버전 번호보다 낮 으면 릴리스 사이에 있으며 데모는 두 버전에있을 수 있습니다.
이 저장소에는 E.164 Formatter라는 데모 Android 앱이 있습니다. 이 앱의 목적은 라이브러리가 실제 상황에서 라이브러리를 어떻게 사용하는지에 대한 예를 보여주는 것입니다.이 경우 특히 Java를 사용하는 Android 앱에서 특히.
JavaScript 데모는 다양한 태그로 실행될 수 있습니다. 이 링크는 master
로 이동합니다.
애플리케이션에 Java 코드를 포함하려면 Maven (위키 참조)과 통합하거나 Maven 저장소에서 최신 항아리를 다운로드하십시오.
Javadoc은 https://javadoc.io/doc/com.googlecode.libphonenumber/libphonenumber/에서 최신 릴리스를 반영하도록 자동 업데이트됩니다.
우리는 일반적 으로이 지침에 따른 릴리스 번호를 선택합니다.
마지막 릴리스 이후 마스터로 추진 된 변경 사항이 기존 LibphonEnumber API의 의도 / 사양과 호환되지 않거나 LibphonEnumber (Java, C ++ 또는 JS) 클라이언트가 구축을 유지하기 위해 코드를 변경해야 할 수도 있습니다. 주요 릴리스. 예를 들어, 마지막 릴리스가 7.7.3 인 경우 새로운 릴리스는 8.0.0입니다.
이러한 변경 사항 중 하나가 클라이언트가 코드를 업데이트하여 새로운 기능을 활용할 수 있고 릴리스가 "Bad"로 표시된 경우 이러한 변경 사항을 롤백 해야하는 경우, 우리는 사소한 릴리스를 게시합니다. 예를 들어, 우리는 7.7.3에서 7.8.0으로 이동합니다.
그렇지 않으면, 릴리스에 메타 데이터 만 변경되는 경우를 포함하여, 우리는 서브 미너 릴리스 (예 : 7.7.3 ~ 7.7.4)를 게시합니다.
때때로 우리는 클라이언트의 호환성에 영향을 미치지 않지만 라이브러리의 포터 에 대한 호환성에 영향을 줄 수있는 코드 또는 메타 데이터를 내부 변경합니다. 그러한 변경을 위해 우리는 LibphoneMber-Discument에 대한 발표를합니다. 이러한 변경 사항은 버전 번호에 반영되지 않으며 다른 변경 사항이없는 경우 하위 미자 릴리스를 게시합니다.
새로운 릴리스에 대한 알림을 받고 싶습니까? 휴일과 소멸의 상황을 제외하고 일년 내내 대부분의 경우, 우리는 2 주간에 석방됩니다. 우리는 릴리스 태그와 자세한 릴리스 노트를 업데이트합니다. 우리는 또한 모든 릴리스에 대해 LibphoneMber-Discument에 발표를 보냅니다.
스위스의 전화 번호를 나타내는 문자열이 있다고 가정 해 봅시다. 이것이 당신이 그것을 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 ));
라이브러리 사용 방법에 대한 더 많은 예는 단위 테스트에서 찾을 수 있습니다.
전화 번호 라이브러리의 여러 타사 포트가 우리에게 알려져 있습니다. 개발자에게 유용한 경우를 대비하여 여기에서 공유합니다.
그러나이 포트는 LibphoneMurber 프로젝트 외부의 개발자에 의한 것임을 강조합니다. 우리는 그들의 품질을 평가하거나 유지 보수 프로세스에 영향을 미치지 않습니다.
우리 자신의 버전에 대한 대안 :
Class#getResourcesAsStream
에서 메타 데이터를로드하고 Android 앱이 메타 데이터를 재 포장하고 AssetManager#open()
자신 (FAQ)에서로드하는 모범 사례를 따라달라고 요청합니다. 이 작업을 원하지 않으면 메타 데이터를 재 포장하고 AssetManager#open()
사용하는 https://github.com/michaelrocks/libphonenumber-android에서 포트를 확인하십시오. 클라이언트의 특정 로딩 최적화. 또한 지오 코딩을 지원하는 https://github.com/lionscribe/libphonenumber-endroid에서 포트를 확인해야하며 한 줄 코드 변경 만 있으면됩니다.libphoneMber 메타 데이터를 기반으로 한 도구 :