代码之家  ›  专栏  ›  技术社区  ›  aidan

如何比较Perl中的国际电话号码?

  •  1
  • aidan  · 技术社区  · 15 年前

    是否有任何模块可以帮助我比较电话号码是否相等?

    例如,以下三个号码是等效的(从英国拨号时)

    +44 (0)181 1234123
    00441811234123
    0181 1234123
    

    有没有Perl模块可以告诉我这个?

    2 回复  |  直到 10 年前
        1
  •  3
  •   martin clayton egrunin    15 年前

    我能看到的最近的 CPAN Number::Phone 这是一个活跃的项目,支持英国电话号码。它应该适用于您给出的具体示例。一些国家得到了支持。

    如果你有其他国家的电话号码,由于本地格式的特殊性,事情可能会变得更加困难。

        2
  •  2
  •   hobbs    15 年前

    假设您需要的代码不存在,并且您必须自己编写,那么您需要执行两个基本操作:

    1. 应用上下文。这是您考虑拨号电话位置的地方。如果呼叫不是国际电话,则提供国家/地区代码;如果呼叫不是长途电话,则提供区号等。当然,这需要每个区域设置一些规则。

    2. 归一化。删除无意义的空格和标点符号,将国际拨号前缀(在Nanpa中是“011”,在世界上大多数地方是“00”,但有时会有很多奇怪的东西)转换为标准“+”。

    在正确完成这两个步骤之后,实际上是等效数字的所有输入都应该给出相同的输出字符串。