什么是电话号码的最佳正则表达式?
什么是电话号码的最佳正则表达式?
这个问题在这里已经有答案了:
可能是重复
我在StackOverflow上看到了一些能够匹配电话号码的正则表达式的帖子。 但是,许多人似乎没有考虑到可能会在数字之间添加空格或划线以增加可读性。
我来自荷兰,但我想使用一种匹配任何电话号码的正则表达式,包括外国国家的号码。
我想将其用于像Skype查找和替换浏览器插件这样的插件。
目前,我正在使用以下正则表达式:
^((\+)?)([\s-.\(\)]*\d{1}){8,13}$
有人有对该正则表达式的任何改进吗?
admin 更改状态以发布 2023年5月23日
我会选择
# 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
但是,一般来说,不同国家电话号码的文本表示方式有太多重叠,不能使用单一的正则表达式。
如果你能匹配所有的表示方式,你会得到太多的错误结果。因为在瑞士可能是一个号码,在俄罗斯、德国或加纳可能是其他东西。
这一切都关乎平衡准确性和召回率,并优化正则表达式以满足你真正需要的国家。