-3

我想通过我的脚本在 Google 中搜索电话号码......所以我需要一些正则表达式来搜索字符串或 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();

                }
            }
        }

请帮我解决这个问题,我想要一个适用于每个国家电话号码的正则表达式......请

4

1 回答 1

4

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

http://www.itu.int/oth/T0202.aspx?parent=T0202

这也是一个很好的资源:世界电话号码指南

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

  • 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 位电话号码的第一位可能会根据订户当前绑定的运营商而改变:01.xx.xx.xx.xx 如果巴黎订户当前正在从 PTT 获得电话服务,以及71.xx.xx.xx.xx,如果同一巴黎用户已切换到 Cegetel。

都是很常用的。

其他国家至少也同样复杂。

一切就绪后,您需要监控 ITU 网站的变化:由于您不是“电信运营商/服务提供商或电信管理机构”,因此您没有资格订阅国际电联的通知服务。

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

于 2013-08-29T18:27:16.397 回答