どの国の電話番号のリスト(文字列)もあります。例えば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ライブラリ(または他のソリューション)を使用していますか?
おかげでたくさん
ftom日付を使用することができます。さらに、電話番号の形式を常に検証することの裏には、限られた量の根拠があるかもしれません。ユーザーが実際の電話番号を提供したくない場合は、電話番号を入力するだけです。 –
あなたの質問の最初の部分は間違っていることがわかりません - ほとんどの国は3桁のダイヤルコードを使用していますが、一部は4,5を6を使用しています:https://en.wikipedia.org/wiki/List_of_country_calling_codes – Jamiec
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