【发布时间】:2010-10-18 18:51:21
【问题描述】:
对于北美电话号码,(999) 999-9999 非常适合作为输入掩码。
但是,我找不到处理非北美数字的好例子。我知道数字的数量可能会有所不同,所以除了将其限制为仅数字之外,任何地方都有一个很好的例子吗?
【问题讨论】:
标签: phone-number
对于北美电话号码,(999) 999-9999 非常适合作为输入掩码。
但是,我找不到处理非北美数字的好例子。我知道数字的数量可能会有所不同,所以除了将其限制为仅数字之外,任何地方都有一个很好的例子吗?
【问题讨论】:
标签: phone-number
没有通用的掩码,真的:组合太多了。
唯一固定的是international country code,通常以+ 为前缀。
根据telephone numbering plans 上的维基百科文章,大多数国家/地区都遵循E.164 编号方案。
如果我正确阅读了 E.164,您可以安全地做出以下假设:
国家代码:1-3 位数字
网络/区号和号码:最多 19 位
我会要求输入国家代码,并将“区号 + 号码”字段作为 19 位输入。
【讨论】:
您可以使用简单的 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,并在数字中选择标点符号,这些标点符号也必须去掉。
【讨论】:
您没有提及您的应用程序,但这当然可以使用regular expressions。你可能想take a look here。
【讨论】:
不容易。查看this page 的示例原因:如果您只查看德国电话号码,您会注意到根据您拨打号码的位置不同,格式也不同。你选哪一个?这仅适用于德国电话号码;它们因大陆和国家而异。
使用“仅数字”可能是您最安全的选择。
【讨论】:
我会允许空格、破折号、斜杠和所有这些,但实际上只关心数字和可选的前导 + 符号。其他一切,例如假设特定长度的某些块都是自找麻烦。
【讨论】:
回答一个老问题可能不好。但是libphonenumber 似乎是您问题的一个很好的解决方案。
【讨论】: