我有一個來自任何國家的電話號碼列表(字符串)。使用libphonenumber來驗證手機號碼而不知道國家
例如:
var items = new List<string> { "+989302794433", "009891234599882", "+391234567890", "00336615551212"};
起初,我認爲每個國家代碼的長度恰好是兩個數,例如(33:法國,39:意大利,98:伊朗,... )。使用libphonenumber庫
,你必須通過註冊碼解析。並因爲(在我的情況下)我得到的字符串(手機號碼)的列表,那麼我必須從數字分開的國家代碼。
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 ...
}
此代碼罰款只適用於國家代碼,他們的長度是兩個數字!
但經過一段時間,我知道一些國家代碼長度是一個數字(例如,美國:1),甚至三個數字!
現在,是否存在任何方式使用libphonenumber庫(或其他解決方案)來解決這個問題?
非常感謝
這是題外話,因爲您請求異地資源。另外,始終驗證電話號碼格式的原因可能有限。如果用戶不想提供一個真實的電話號碼,他們只會提出一個。 –
你的問題的第一部分是微不足道的證明不正確 - 大多數國家使用3位撥號代碼,有些使用4,5甚至6:https://en.wikipedia.org/wiki/List_of_country_calling_codes – Jamiec
他們的github頁面鏈接到這個網站作爲演示https://libphonenumber.appspot.com/和他們的演示聲稱使用「ISO 3166-1雙字母國家代碼」和鏈接:http://www.iso.org/iso/english_country_names_and_code_elements。因此,也許嘗試使用這些2個字符的字母代碼而不是1-3位數字代碼。例如,嘗試使用「美國」而不是「840」來代替美國。 – Quantic