C# 用于电话号码字符串搜索的正则表达式,适用于每个国家

C# 用于电话号码字符串搜索的正则表达式,适用于每个国家,c#,regex,C#,Regex,我想通过我的脚本在谷歌搜索电话号码…所以我需要一些正则表达式来搜索字符串或html中每个国家的电话号码。。。我尝试了下面的正则表达式,但它不起作用` private string findphone(string source) { string my = ""; string phone = ""; string MatchPhoneNumberPattern3 = @"\D(\d{3}\s\d{3}\s\d{4

我想通过我的脚本在谷歌搜索电话号码…所以我需要一些正则表达式来搜索字符串或html中每个国家的电话号码。。。我尝试了下面的正则表达式,但它不起作用`

private string findphone(string source)
        {
            string my = "";
            string phone = "";

        string MatchPhoneNumberPattern3 = @"\D(\d{3}\s\d{3}\s\d{4})\D";
        MatchCollection mathph3 = Regex.Matches(source, MatchPhoneNumberPattern3);
        foreach (Match match4 in mathph3)
        {
            foreach (Capture capture in match4.Captures)
            {
                if (my.ContainsKey(capture.Value) == false)
                {
                    phone = capture.Value.ToString();

                }
            }
        }

关于这一点,请帮助我,我想要这样一个适用于每个国家/地区电话号码的正则表达式…plz

要做您想做的事情,您首先需要访问ITU(国际电信联盟)网站,了解国家编号计划:

这也是一个很好的资源:

然后,您需要处理许多不同的编号计划,并将它们集成到一个正则表达式中。并且要处理这样一个事实,即人们根据上下文不同地表示电话号码(根据您从何处拨号和拨到何处,可能需要或不需要电话号码的不同组成部分,并且号码的格式可能会更改。例如,所有这些都代表北美的同一用户线路,具体取决于上下文:

  • 555-1234
  • 1-555-1234
  • 206-555-1234
  • 1-206-555-1234
  • 00-1-206-555-1234(从法国和其他国家直接拨号)
  • 0011-1-206-555-1234(从澳大利亚直拨)
  • 119-1-206-555-1234(古巴直拨)
  • 等等,还有更多
别忘了记电话号码也有很多惯例

  • 206.555.1234
  • 206/555.1234
  • (206)555-1234
  • 206-555-1234
  • 等等,更不用说国际标准了,其中数字的前缀是国家代码:

    • +1:206-555-1234(NANP)
    • +33:xx.xx.xx.xx.xx(法国)

      在法国,10位电话号码的第一位数字可能会根据用户当前绑定到的运营商而变化:如果巴黎用户当前正在从PTT获得电话服务,则为01.xx.xx.xx.xx;如果同一巴黎用户已切换到Cegetel,则为71.xx.xx.xx

都很常用

其他国家至少也一样复杂

一旦这些都准备好了,你就需要监控ITU网站的变化:因为你不是“电信运营商/服务提供商或电信管理机构”,你就没有资格订阅ITU的通知服务


此外,您还需要提供向后兼容性,因为当号码计划更改时,人们不一定会快速更改他们记录电话号码的方式。

您不能这样做。新的电话号码格式会一直出现。如果某个国家的电话号码格式更改了怎么办?我所在国家的电话号码格式不会更改他的九月。
它不起作用
是一个完全无用的问题描述。谷歌有一个用于处理电话号码的开源库()这是几百K,每个国家都有一个单独的格式文件。你不能用正则表达式复制它。请向NSA咨询,一定有办法。这是一个糟糕问题的好答案。