7

对于北美电话号码,(999) 999-9999 非常适合作为输入掩码。

但是,我找不到一个可以处理非北美数字的好例子。我知道位数可能会有所不同,所以除了将其限制为仅位数之外,在任何地方都有一个很好的例子吗?

4

6 回答 6

4

真的没有通用的面具:有太多的组合。

唯一固定的是国际国家代码,通常以 . 为前缀+

根据关于电话编号计划的维基百科文章,大多数国家/地区都遵循E.164编号计划。

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

  • 国家代码:1-3 位数字

  • 网络/区号和号码:最多 19 位

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

于 2010-10-18T18:55:16.443 回答
2

您可以使用简单的 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 或类似的。

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

于 2012-09-12T00:28:47.340 回答
0

您没有提及您的应用程序,但这当然可以使用正则表达式。你可能想看看这里

于 2010-10-18T18:53:48.993 回答
0

不容易。看看这个页面的例子为什么:如果你只看德国电话号码,你会注意到有不同的格式,具体取决于你从哪里拨打电话号码。你选哪一个?这仅适用于德国电话号码;它们因大陆而异,因国家而异。

使用“仅数字”可能是您最安全的选择。

于 2010-10-18T18:57:16.707 回答
0

我会允许空格、破折号、斜杠和所有这些,但实际上只关心数字和可选的前导 + 符号。其他一切,例如假设特定长度的某些块只是在自找麻烦。

于 2010-10-18T19:21:16.817 回答
0

回答一个老问题可能是不好的。但是libphonenumber似乎是您问题的一个很好的解决方案。

于 2013-10-17T09:05:34.990 回答