当前位置: 首页 > 知识库问答 >
问题:

使用libphonenumber在不知道国家/地区的情况下验证移动电话号码

滑骞尧
2023-03-14

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

例如:

var items=新列表

起初,我认为每个国家的代码长度正好是两个数字,例如(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库(或其他解决方案)来解决此问题的方法?

谢谢


共有2个答案

宋英杰
2023-03-14

您可以使用此软件包的日期FTOhttps://www.npmjs.com/package/dialcodes

颜文康
2023-03-14

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; 
}
 类似资料:
  • 我从一个看起来很棒的图书馆听到了很多好消息,但我发现自己处于微妙的境地。 这是我工作过的第一个将电话号码存储在数据库中的项目。 我读过一些关于E.164格式的书,我确实打算用这种格式在我的数据库中存储所有电话号码。 我面临的问题是数据源。我无法控制数据源。我只知道我收到了一堆电话号码,它们的格式不一致。有些有国际延伸,有些没有。有些有括号、连字符、前导0等。有些没有。 我如何可能从上述来源提取电话

  • 我有这样一个字符串:33123456789(法语电话号码)。我想在不知道国家的情况下提取国家代码(33)。例如,如果我有另一部来自另一个国家的手机,它应该可以工作。我使用谷歌图书馆https://code.google.com/p/libphonenumber/. 如果我知道国家,那很酷,我可以找到国家代码: 但是我找不到一种在不了解国家的情况下解析字符串的方法。

  • 问题内容: 编辑: 我已经混合并修改了下面给出的两个答案,以形成完整的功能,它现在可以完成我想要的,然后执行某些操作…所以我想我将它张贴在这里,以防其他任何人寻找相同的内容事情。 问题答案: 您可以使用先行断言来解决此问题。基本上,我们要说的是我想要一系列特定的字母(例如,ex,ext,x,extension),然后是一个或多个数字。但我们也想涵盖根本没有扩展的情况。 旁注,您不需要在诸如[\ s

  • 我想要电话号码的国家代码列表。例如,美国(1),英国(44)...我知道libphonenumber是一个帮助手机解析、格式化和验证的好工具。然而,它似乎没有列出所有国家代码的功能。但是那些数据应该在libphonenumber的元数据中,对吗?有人有这方面的经验吗?

  • 在Github上libphonenumber提供的文档中,有一个演示,它将提供的任何数字转换为国际格式,例如转换为 我想在C#中使用相同的功能。 在libphone的文档中,需要解析号码并提供国家/地区。但是,演示在不提供地区/国家信息的情况下工作。有人能告诉我是怎么做的吗?

  • 问题内容: 我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一: (123)456-7890 或 123-456-7890 问题是我的客户(我不知道为什么,也许是客户的东西)想添加另一种格式,即连续十个数字,如下所示: 1234567890 。 我正在使用这个正则表达式, 如何添加它还可以验证另一种格式?我对正则表达式不好。 问题答案: 首先,您的格式验证器显然仅适用于NANP