正则表达式匹配 phone 个数字,但在文本段落中

Regex to match phone numbers, but in text paragraph

我想使用 PHP 函数 preg_replace() 突出显示文本中的 phone 个数字。

效果很好:

(?=(?:\D*\d\D*){8,14}$)[- \d()+]*

它几乎匹配那些不同的格式:

01 02 03 04 05
0102030405
+33102030405 01-02-03-04-05
01.02.03.04.05
+33 1 02 03 04 053
(33)102030405

DEMO

但现在我想运行这个测试文本:

blabla 01 02 03 04 05 blabla 0102030405 blabla +33102030405 blabla 01-02-03-04-05 blabla 01.02.03.04.05 blabla +33 1 02 03 04 05 blabla (33)102030405

我不会说流利的正则表达式,我尝试了很多东西但都失败了。

DEMO

感谢您的帮助。

你可以使用

[+(]?\d(?:[-()+\s.]*\d){8,14}(?![-()+\s.]*\d)

详情:

  • [+(]? - 可选的 +(
  • \d - 一个数字
  • (?:[-()+\s.]*\d){8,14} - -()+、空格或 . 字符出现 8 到 14 次,并且然后一个数字
  • (?![-()+\s.]*\d) - 不紧跟 -()+、空格或 . 字符,然后一个数字。

参见regex demo