我正在尝试从字符串中提取仅限美国的电话号码。
我浏览了网络/SO,但没有找到适合我需求的解决方案。
老实说,我有 2.5 年的 Web 编程经验,但我不擅长 RegEX。
这里只有我写的RegEX (\d{3}+\-\d{3}+\-\d{4}+)
但它只检测到 589-845-2889
这是我要提取的电话号码。
589-845-2889
(589)-845-2889
589.845.2889
589 845 2889
5898452889
(589) 845 2889
请告诉我如何在 PHP 的单个 Regex 中实现这一壮举。
编辑:
如果您觉得用户可以输入任何其他格式的美国号码,也请提及,并将其也包含在 RegEX 中。
附言:
实际上我正在尝试抓取 Craiglist,用户可能已经以任何可能的格式发布了他们的电话号码。
最佳答案
在 PHP (PCRE) 中,您可以使用基于 conditional subpatterns 的正则表达式:
(\()?\d{3}(?(1)\))[-.\h]?\d{3}[-.\h]?\d{4}
(\()?
匹配可选的(
并在组 #1 中捕获它(?(1)\))
是 条件模式 匹配结束)
仅当第 1 组不为空时,即(
出现在匹配项的左侧。
关于php - 从字符串中提取美国电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38201863/