使用 libphonenumber 在不知道国家/地区的情况下验证手机 phone 号码
Use libphonenumber to validate mobile phone number without knowing the country
我有一个来自任何国家/地区的 phone 号码列表(字符串)。
例如:
var items = new List<string> { "+989302794433", "009891234599882", "+391234567890", "00336615551212"};
起初,我认为每个国家代码长度正好是两个数字,例如(33:法国,39:意大利,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 库(或其他解决方案)来解决此问题的方法?
非常感谢
只要号码以+开头,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;
}
您可以使用此包中的日期 https://www.npmjs.com/package/dialcodes
我有一个来自任何国家/地区的 phone 号码列表(字符串)。
例如:
var items = new List<string> { "+989302794433", "009891234599882", "+391234567890", "00336615551212"};
起初,我认为每个国家代码长度正好是两个数字,例如(33:法国,39:意大利,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 库(或其他解决方案)来解决此问题的方法?
非常感谢
只要号码以+开头,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;
}
您可以使用此包中的日期 https://www.npmjs.com/package/dialcodes