2016-10-05 12 views
0

どの国の電話番号のリスト(文字列)もあります。例えばlibphonenumberを使用して、国を知らずに携帯電話番号を確認します

:フランス、39:イタリア、98:最初の

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

、私はすべての国コード長は、例えば、正確に2つの番号、(33だと思いイラン、... )。

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 ... 
     } 

このコードは、長さが2桁の国コードの場合のみ有効です。

少し時間がたって、私はいくつかの国コードの長さが1つの数字(たとえばUS:1)であり、さらに3つの数字であることを知っていました。

現在、この問題を解決するには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ライブラリは限り数が+で始まるとしてそれ自体で国コードを見つけることができます。だから、数字の先頭にある二重ゼロをプラスで置き換えてください。そして、番号がそれ自身で有効かどうかを図書館に決定させます。

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; 
} 
関連する問題