确定有关电话号码的信息并在PHP中重新格式化

时间:2010-10-06 11:41:04

标签: php country country-codes

我正在寻找一种方法来确定电话号码是国际格式还是本地格式,以及它是否属于国际格式所属的国家/地区。如果它是本地格式,它应该提示用户输入国家代码,然后将其转换为国际格式。

示例:

  • 00447749123123 =国际英国号码 - 重新格式化为447749123123

  • +447749123123 =国际英国号码 - 重新格式化为447749123123

  • 447749123123 =国际英国号码

  • 07749123123 =国家英国号码 - 国家/地区代码提示并重新格式化为447749123123

  • 18775784000 =国际美国号码

  • 8775784000 =美国国内号码 - 提示输入国家代码并重新格式化为18775784000

是否有人知道这样的脚本是否存在,或者如果不存在如何进行此操作? IT应该为尽可能多的国家(不仅仅是英国和美国)工作。

2 个答案:

答案 0 :(得分:1)

我不认为这样的脚本或网络服务存在,几周前我研究了类似的东西。

由于各个国家/地区的电话号码不同,我认为您很难创建适用于所有国家/地区的脚本,并且可以通过不同的方式编写电话号码。

您必须对输入的电话号码进行假设。 基本上你有两种不同的方法。

  1. 制定一个仅适用于已知国内电话号码格式的严格解决方案
  2. 制定灵活的解决方案,只接受易于识别的国际格式,但因此,接受任何国内格式。
  3. 我会选择第二个选项。

    在您的示例中,数字1和2很容易识别为国际号码。 3号很难识别,因为它可能是一个国际英国号一个拥有12位数国内电话号码的未知国家。

    所以我首先接受选项一和二作为有效的国际号码并跳过三号。

    <?php
    $number = "00447749123123"; // remember the quotes the number must 
                                // keep leading zeros.
    
    if (preg_match('/^(00|\+)/', $number)) {
        echo "International number";
        // parse and recognize country code.
    } else {
        echo "national number";
        // identify which country
    }
    

    由于许多国家/地区将共享相同的格式,因此无法确定国家电话号码而无需事先了解其所在的国家/地区。因此,让用户在网络表格中选择国家/地区是必要的,可以将国际代码添加到数字中。

答案 1 :(得分:1)

没有任何免费,但Neustar将是您最好的付费服务。我认为他们也提供国际号码服务,但您可能需要编写自己的API接口。另一条付费路线可能是Twilio,但我不确定他们的国际选择。我知道一些较大的SMS聚合器可能会为其产品提供此功能,但不能作为独立的API /服务。如果您正在寻找付费选项,可以尝试OpenMarket(MxTelecom for international)。只是一个想法