用于捕获电话号码的松散正则表达式

问题描述 投票:0回答:1

我正在尝试构建一个功能,用于浏览用户之间的消息并尝试存储可能在消息中共享的所有美国电话号码。我希望对我存储的电话号码非常宽松。为此,我在 PHP 中提出了以下正则表达式(下面给出了清晰的解释)

"/(?:\+?1[.\s-]*)?(?:\(?\d{1,3}\)[.\s-]*)?(?:\d{3}[.\s-]+)(?:\d{4}[.\s-]*)(?:(ext|ext\.|Ext|Ext\.|extension|Extension)?[.\s-]*\d{1,6})?|(?:\+?1?\d{10})/",

(?:+?1[.\s-]*)?:这部分处理带有可选分隔符(点、空格或连字符)的可选国家/地区代码 (+1)。它是可选的,因为我也想捕获没有国家/地区代码的电话号码

(?:(?\d{1,3})[.\s-]*)?:这部分处理括号内的可选区号

(?:\d{3}[.\s-]+):这部分匹配电话号码的前三位数字,后跟分隔符(可以是“.”“-”或空格)

(?:\d{4}[.\s-]*):此部分匹配电话号码的后四位数字,后跟可选分隔符(可以是“.”、“-”或空格)

(?:(ext|ext.|Ext|Ext.|extension|Extension)?[.\s-]*\d{1,6})?:这部分捕获可选扩展名(不区分大小写)分隔符和最多六位数字。

|:这是一个交替运算符,允许正则表达式匹配其之前或之后的模式。

(?:+?1?\d{10}):这部分处理没有明确分隔符的电话号码的替代模式,其中可能有可选的国家/地区代码 (+1) 和 10 位数字。

但是,这个正则表达式与以下字符串匹配

+44 20 7123 4567
其中
123 4567
是比赛

我应该用什么来避免捕捉到这个?

php regex numbers
1个回答
0
投票

不确定,这是否会连接您的所有情况,但如果您在开头添加

(?!\+\d{0,2}[^1])
,则可以确保字符串不以 + 符号开头,后跟最多 2 位数字和 1 以外的字符。

© www.soinside.com 2019 - 2024. All rights reserved.