我需要一个接受以下所有电话号码格式的正则表达式:
+ 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)时才匹配..我该怎么做?我试着做一个前瞻/后视,但我无法让它发挥作用。
谢谢!
答案 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是我的来源。