用于接受电话号码的正则表达式

时间:2012-03-20 13:14:18

标签: java python regex

  

可能重复:
  A comprehensive regex for phone number validation

我需要一个接受以下所有电话号码格式的正则表达式:

+ 1-650-123-0123

(650)123 0123

(650)123-0123

(+ 1):650-123-0123

(+ 1)650 123 0123

我目前有以下正则表达式:

\(?\+?[0-9]?\)?-?\(?(\d{3})\)?(\s|-)+(\d{3})(\s|-)+(\d{4})

我目前遇到的问题是它接受了大部分内容,但没有接受以下内容:(650)123-0123。中间的部分((\ s | - )+)只有在找到(xyz)时才匹配..我该怎么做?我试着做一个前瞻/后视,但我无法让它发挥作用。

谢谢!

3 个答案:

答案 0 :(得分:3)

有一个project on Google code已经解决了你的问题!

他们的解决方案是ported to Python

  

功能亮点

     

解析/格式化/验证所有国家/地区的电话号码   世界的。

     

getNumberType - 获取基于的数字类型   数字本身;能够区分固定电话,移动电话,免费电话,   优惠费率,共享费用,VoIP和个人号码(无论何时   可行)。

     

isNumberMatch - 对两个人是否有信心   数字可能是相同的。

     

getExampleNumber / getExampleNumberByType -   为所有国家/地区提供有效的示例数字   指定需要哪种类型的示例电话号码的选项。

     

isPossibleNumber - 快速猜测一个数字是否可能   通过仅使用长度信息的音频,比a快得多   完全验证。

     

isValidNumber - 完整验证电话号码   使用长度和前缀信息的区域。

     

AsYouTypeFormatter -   当用户输入每个数字时,即时格式化电话号码。

     

findNumbers - 在文本输入中查找数字。

     

PhoneNumberOfflineGeocoder    - 提供与电话号码相关的地理信息。

答案 1 :(得分:1)

您可以使用(?(?=regex)then|else)之类的条件预测,但AFAIK Java的标准正则表达式引擎不支持这些。

或者构建几个表达式并测试它们中的任何一个是否匹配。这将使表达式的读/写更容易,甚至可能没有明显的性能影响。如果您需要单个表达式中的所有内容,请尝试以下方法:

^expression1$|^expression2$|...

但请注意,如果表达式过于复杂,则可能会导致一些问题(某些JVM版本似乎对|(或)表达式有困难。

答案 2 :(得分:0)

请查看我的来源。这将为您提供许多起点,用于构建电话号码的正则表达式。

Here是我的来源。