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

是否可以创建一个处理非北美电话号码的掩码?

  •  6
  • chris  · 技术社区  · 14 年前

    对于北美电话号码,(999)999-9999对于输入掩码非常有效。

    然而,我找不到一个能处理非北美数字的好例子。我知道数字的数目是可以变化的,所以除了只限于数字之外,还有什么好的例子吗?

    6 回复  |  直到 14 年前
        1
  •  4
  •   Pekka    14 年前

    没有通用的掩码,真的:有太多的组合。

    唯一被修复的是 international country code + .

    根据维基百科关于 telephone numbering plans ,大多数国家符合 E.164 编号计划。

    如果我正确阅读E.164,您可以安全地做出以下假设:

    • 国家代码:1-3位

    • 网络/区号:最多19位

    我要求输入国家代码,并将“区号+号码”字段作为19位输入。

        2
  •  2
  •   Jack Ishu    12 年前

    您可以使用一个简单的RegEx推断国家代码,例如:

    ^(?:(?:0(?:0|11)\s?)|+)([17]|2([07]|[1-689]\d)|3([0-469]|[578]\d)|4([013-9]|2\d)|5([1-8]|[09]\d)|6([0-6]|[789]\d)|8([12469]|[03578]\d)|9([0-58]|[679]\d))
    

    然后

    (([\s\(\).-]{0,2}\d){4,13})$
    

    提取国家号码。

    要验证国家号码的长度和有效性,您需要libphonenumber或类似的。

    上面的长RegEx允许在国家代码前加上、00或011,并在数字中选择标点符号,这些标点符号也必须去掉。

        3
  •  0
  •   Community CDub    8 年前
        4
  •  0
  •   CanSpice    14 年前

    不容易。看一看 this page

    用“数字专用”可能是你最保险的选择。

        5
  •  0
  •   Sebastian Negraszus    14 年前

    我会考虑空格、破折号、斜杠等等,但实际上只关心数字和可选的前导+符号。其他的一切,比如假设某个街区有一定的长度,都是自找麻烦。

        6
  •  -1
  •   Jach    11 年前

    libphonenumber 似乎是解决你问题的好办法。