php - 从字符串中提取美国电话号码

标签 php regex

我正在尝试从字符串中提取仅限美国的电话号码。

我浏览了网络/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}

RegEx Demo

  • (\()? 匹配可选的 ( 并在组 #1 中捕获它
  • (?(1)\))条件模式 匹配结束 ) 仅当第 1 组不为空时,即 ( 出现在匹配项的左侧。

关于php - 从字符串中提取美国电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38201863/

相关文章:

php - 从 while 循环中获取变量

python - 如何使用正则表达式在字符串中的任何字母中查找逗号并删除逗号?

php正则表达式读取选择表单

java - 我如何更改 Ant grep 使其正则表达式中具有 unix 样式 "or"?

php - 在 laravel 5.2 中查询 groupBy 内的原始数据

php - wordpress get_option 返回 false

php - 使用 python 脚本 "Exit Code: 127(Command not found)"的 Laravel 任务计划

php 不被识别为内部命令(在 Windows 中)

python - 正则表达式删除多行字符串中的重复短语

PHP - 检查数组中的重复项并更新循环中的重复值