使用libphonenumber在不知道国家的情况下验证手机号码

KoK*_*oKo 4 c# libphonenumber

我有来自任何国家/地区的电话号码列表(字符串)。

例如:

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 ...
        }  
Run Code Online (Sandbox Code Playgroud)

此代码仅适用于长度为两个数字的国家/地区代码!

但是过了一会儿,我知道某些国家/地区代码长度是一个数字(例如,美国:1)甚至三个数字!。

现在,是否存在使用libphonenumber库(或其他解决方案)来解决此问题的任何方法?

多谢

Nin*_*rry 6

只要数字以 + 开头,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; 
}
Run Code Online (Sandbox Code Playgroud)