电话号码的最佳正则表达式是什么?

时间:2012-12-05 08:53:18

标签: regex phone-number

  

可能重复:
  A comprehensive regex for phone number validation
  What regular expression will match valid international phone numbers?

我在StackOverflow上看到了与电话号码匹配的正则表达式上的一些帖子。 但是,许多人似乎没有考虑可能的空格或数字之间的虚线以提高可读性。

我来自荷兰,但我想使用匹配任何电话号码的正则表达式,包括在国外的电话号码。

我想将它用于一个插件,例如用于浏览器的Skype查找和替换插件。

目前,我正在使用以下正则表达式:

^((\+)?)([\s-.\(\)]*\d{1}){8,13}$

有人有任何改进吗?

1 个答案:

答案 0 :(得分:4)

我会去

# countryCode
(?:\+\d{1,3}|0\d{1,3}|00\d{1,2})

# actual number
(?:[-\/\s.]|\d)+

# combined with optional country code and parantheses in between
 ^(?:\+\d{1,3}|0\d{1,3}|00\d{1,2})?(?:\s?\(\d+\))?(?:[-\/\s.]|\d)+$

这应该足以匹配大多数欧洲和美国代表的电话号码

+49 123 999
0001 123.456
+31 (0) 8123

但总的来说,电话号码的重叠文本表示太多,以至于在不同的国家/地区使用单个正则表达式。 如果你可以匹配所有表示,你会得到许多误报。在瑞士可能是一个数字可能是俄罗斯,德国或加纳的其他东西。 这一切都是为了平衡预先准备和召回以及将Regex优化到您真正需要的国家。