正则表达式用于搜索字符串中的电话号码,适用于每个国家/地区

时间:2013-08-29 17:59:20

标签: c# regex

我想通过我的脚本搜索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();

                }
            }
        }

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

1 个答案:

答案 0 :(得分:4)

要做你想做的事,你首先需要访问国际电联(国际电信联盟)有关国家编号方案的网站:

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

这也是一个很好的资源:The World Telephone Numbering Guide

然后,您需要完成许多不同的编号计划,并将它们集成到一个正则表达式中。并且处理这样一个事实,即人们代表的电话号码在不同的情况下取决于具体情况(取决于您拨打和拨打的位置,电话号码的不同组成部分可能需要也可能不需要,并且号码的格式可能会发生变化。例如,所有这些代表了北美的相同用户线,具体取决于具体情况:

  • 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获得电话服务,如果同一个巴黎用户已切换到Cegetel,则为71.xx.xx.xx.xx。

都很常见。

其他国家至少同样复杂。

一旦你掌握了所有这些,那么你需要监控国际电联网站的变化:由于你不是“电信运营商/服务提供商或电信管理局”,你没有资格订阅国际电联的通知服务。

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