2016-10-05 5 views
0

어떤 국가의 전화 번호 목록 (문자열)이 있습니다. 예를 들어libphonenumber를 사용하여 국가를 모른 채 휴대 전화 번호를 확인하십시오.

: 프랑스, ​​39 : 처음에

var items = new List<string> { "+989302794433", "009891234599882", "+391234567890", "00336615551212"};

, 나는 모든 국가 코드 길이가 정확히 예 (33 개의 숫자이라고 생각 이탈리아, 98 :이란, ...).

libphonenumber 라이브러리를 사용하는 경우 구문 분석을 위해 regCode를 전달해야합니다. (내 시나리오에서) 문자열 (휴대 전화 번호) 목록을 얻었 기 때문에 번호와 국가 코드를 구분해야합니다.

 foreach (var item in items) 
     { 
      int countryCode = 0; 
      var number = ""; 

      if (item.StartsWith("+")) 
      { 
       countryCode = int.Parse(item.Substring(1, 2)); 
       number = item.Substring(3); 
      } 
      else if (item.StartsWith("00")) 
      { 
       countryCode = int.Parse(item.Substring(2, 2)); 
       number = item.Substring(4); 
      } 
      var regCode = phoneUtil.GetRegionCodeForCountryCode(countryCode); 

      var numberWithRegCode = phoneUtil.Parse(number, regCode); 

      if (!phoneUtil.IsValidNumber(numberWithRegCode)) continue; 
      //else ... 
     } 

이 코드는 길이가 두 자리라는 국가 코드에만 적용됩니다.

하지만 약간의 시간이 지나면 일부 국가 코드 길이가 하나의 숫자 (예 : US : 1)이고 심지어 세 개의 숫자라는 것을 알았습니다.

지금은 libphonenumber 라이브러리 (또는 다른 솔루션)를 사용하여이 문제를 해결할 수 있습니까?

덕분에 많은

+1

ftom 날짜를 사용할 수 있습니다. 또한 전화 번호 형식을 항상 검증하는 데에는 제한된 양의 근거가있을 수 있습니다. 사용자가 실제 전화 번호를 제공하지 않으려는 경우 전화 번호를 입력하게됩니다. –

+0

질문의 첫 부분이 잘못 되었음이 드문 경우입니다. 대부분의 국가에서 3 자리 숫자 코드를 사용하고 일부는 4, 5, 6을 사용합니다. https://en.wikipedia.org/wiki/List_of_country_calling_codes – Jamiec

+0

github 페이지에서이 웹 사이트로 연결됩니다. 데모 https://libphonenumber.appspot.com/으로 데모에서 "ISO 3166-1 2 문자 국가 코드"를 사용하고 http://www.iso.org/iso/english_country_names_and_code_elements에 링크되어 있습니다. 아마 1-3 자리 숫자 코드 대신 2 문자 알파 코드를 사용해보십시오. 예를 들어, 'US'를 '840'대신 미국에 사용하십시오. – Quantic

답변

2

libphonenumber 라이브러리는 한 번호가 +로 시작으로 그 자체로 국가 코드를 찾을 수 있습니다. 따라서 숫자의 시작 부분에있는 이중 0을 더하기로 바꾸십시오. 그리고 도서관이 그 번호가 유효한지 여부를 결정하게하십시오.

libphonenumber는 더하기 기호 다음에 오는 국가 코드 (자체적으로 모든 코드의 목록이 있음)가 무엇인지 알고 있으며 올바른 국가에 따라 규칙을 적용하여 해당 번호가 유효한지 여부를 결정합니다.

bool IsValidNumber(string aNumber) 
{ 
    bool result = false; 

    aNumber = aNumber.Trim(); 

    if (aNumber.StartsWith("00")) 
    { 
     // Replace 00 at beginning with + 
     aNumber = "+" + aNumber.Remove(0, 2); 
    } 

    try 
    { 
     result = PhoneNumberUtil.Instance.Parse(aNumber, "").IsValidNumber; 
    } 
    catch 
    { 
     // Exception means is no valid number 
    } 

    return result; 
}