전화 번호 [libphonenumber]에서 코드 국가 추출
다음과 같은 문자열이 있습니다. +33123456789 (프랑스어 전화 번호). 국가를 모르고 국가 코드 (+33)를 추출하고 싶습니다. 예를 들어 다른 국가의 다른 전화가 있으면 작동합니다. Google 라이브러리 https://code.google.com/p/libphonenumber/를 사용합니다 .
내가 국가를 안다면 국가 코드를 찾을 수 있다는 것이 멋지다.
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
int countryCode = phoneUtil.getCountryCodeForRegion(locale.getCountry());
하지만 국가를 모르고 문자열을 구문 분석하는 방법을 찾지 못했습니다.
좋아, 그래서 나는 libphonenumber의 구글 그룹 ( https://groups.google.com/forum/?hl=ko&fromgroups#!forum/libphonenumber-discuss )에 가입했고 질문을했습니다.
내 전화 번호가 "+"로 시작하면 매개 변수에 국가를 설정할 필요가 없습니다. 다음은 예입니다.
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
// phone must begin with '+'
PhoneNumber numberProto = phoneUtil.parse(phone, "");
int countryCode = numberProto.getCountryCode();
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}
여기에서 전화 번호를 국제 형식의 전화 번호로 저장할 수 있습니다.
internationalFormatPhoneNumber = phoneUtil.format(givenPhoneNumber, PhoneNumberFormat.INTERNATIONAL);
전화 번호를 국제 형식으로 반환합니다. +94 71560 4888
그래서 이제 국가 코드를 얻었습니다.
String countryCode = internationalFormatPhoneNumber.substring(0,internationalFormatPhoneNumber.indexOf('')).replace('+', ' ').trim();
이것이 당신을 도울 수 있기를 바랍니다
고객 중 한 명이 비슷한 문제를 겪었고 모든 전화 번호가 "+"로 시작하지 않았습니다. 하지만 전화 번호 형식을 기반으로 국가를 추측하는 것은 여전히 가능합니다. 예를 들어 06 XX XX XX XX는 프랑스 휴대 전화 번호처럼 보입니다. 다른 것일 수도 있지만 프랑스 번호로 유효성을 검사하고 libphonenumber가 긍정적으로 확인할 수 있는지 확인하려는 작업입니다.
또한이 고객은 연락처의 이름을 사용하여 원산지 일 가능성이 높은 국가를 확인하고 우선 순위를 지정했습니다. 예를 들어, 이탈리아 이름을 사용하면 이탈리아 전화 번호로 인증을 시도합니다.
국가 코드 감지 기능을 libphonenumber에 추가하고 개인 이름과 전화 번호 형식 (접두사, 자릿수, 공백, 대시 또는 괄호가있는 경우 등)을 결합한 무료 API를 만들었습니다.
여기에서 온라인으로 시도 할 수 있습니다 https://apiphonenumber.com/
"+"로 시작하는 숫자와 함께 작동하지만 95 %의 경우 다른 로컬 형식의 숫자와도 작동합니다.
위에 게시 된 한 가지 답변을 기반으로이 문제를 처리하는 편리한 도우미 방법을 유지했습니다.
수입품 :
import com.google.i18n.phonenumbers.NumberParseException
import com.google.i18n.phonenumbers.PhoneNumberUtil
함수:
fun parseCountryCode( phoneNumberStr: String?): String {
val phoneUtil = PhoneNumberUtil.getInstance()
return try {
// phone must begin with '+'
val numberProto = phoneUtil.parse(phoneNumberStr, "")
numberProto.countryCode.toString()
} catch (e: NumberParseException) {
""
}
}
전화 번호가 포함 된 문자열이 항상이 방법으로 시작하는 경우 (+33 또는 다른 국가 코드) 정규식을 사용하여 국가 코드를 구문 분석하고 가져온 다음 라이브러리를 사용하여 번호에 연결된 국가를 가져와야합니다.
다음은 타사 라이브러리를 사용하지 않고 국가 전화 코드를 찾는 방법에 대한 답변입니다 (실제 개발자처럼).
사용 가능한 모든 국가 코드 목록을 얻으십시오. Wikipedia는 여기에서 도움을 줄 수 있습니다 : https://en.wikipedia.org/wiki/List_of_country_calling_codes
각 숫자가 분기 인 트리 구조의 데이터를 구문 분석합니다.
마지막 지점에 도달 할 때까지 숫자로 트리 숫자를 이동하십시오. 이것이 국가 코드입니다.
참고 URL : https://stackoverflow.com/questions/16809508/extract-code-country-from-phone-number-libphonenumber
'program story' 카테고리의 다른 글
| Microsoft.Net.Compilers의 목적은 무엇입니까? (0) | 2020.11.02 |
|---|---|
| 특정 페이지에서 사용 된 CSS 만 추출 (0) | 2020.11.02 |
| TypeScript의 개인 "함수" (0) | 2020.11.02 |
| Node.js 스트림 vs. Observable (0) | 2020.11.02 |
| Angular2 동적 변경 CSS 속성 (0) | 2020.11.02 |