7

可能重复:
电话号码验证的综合正则表达式
什么正则表达式将匹配有效的国际电话号码?

我在 StackOverflow 上看到了一些关于匹配电话号码的正则表达式的帖子。但许多似乎没有考虑到可能的空格或数字之间的破折号以增加可读性。

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

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

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

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

有没有人对那个有任何改进?

4

1 回答 1

8

我会去

# 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

但一般来说,电话号码的重叠文本表示太多,无法为不同国家使用单个正则表达式。如果你能匹配所有的表示,你会得到很多误报。因为瑞士的数字可能是俄罗斯、德国或加纳的其他数字。这一切都是为了平衡精确度和召回率,并将正则表达式优化到您真正需要的国家。

于 2012-12-05T14:39:45.573 回答