【问题标题】:Extract phone numbers from Gmail email body从 Gmail 电子邮件正文中提取电话号码
【发布时间】:2013-09-16 10:02:10
【问题描述】:

是否有从 Gmail 电子邮件正文中获取真实电话号码的良好解决方案? 我尝试通过 IMAP 获取电子邮件,但 html 结果无法真正解析。

我的代码:

$message = imap_fetchbody($inbox,$emails,1);

正文结果是:

示例 1:

 bla-bla-bla
 <strong>TEXT</strong>
 " : +22545091040"
 <br />
 bla-bla-bla

示例 2:

bla-bla-bla
<strong>TEXT</strong>
" : 0980653935 France"
<br />
bla-bla-bla

所有电子邮件都具有以下结构:

 Bonjour,<br><br>Voici le numéro de téléphone de <strong>*NAME*</strong> : *INPUT1 DATA*<br>
 <br>Son adresse email est la suivante : *INPUT2 DATA*<br>

是否有正则表达式或其他方法可以从电子邮件正文中提取此电话号码?

谢谢!

【问题讨论】:

  • 国际电话号码有多种格式,甚至会定期更改。除非你确切地知道它们在体内的位置......到目前为止有什么尝试吗?
  • 我将完整的电子邮件结构添加到我的问题中。
  • 是的,可以在电话号码部分找到任何其他字符。有时会有字符串和无用的字符,例如:O147659990
  • 不,我的意思是,实际电话号码可以包含其他字符吗?
  • 对正则表达式有帮助吗?

标签: regex email gmail preg-match


【解决方案1】:

您可以尝试在电子邮件正文中使用preg_match

preg_match('~[0-9]+(?=[^"]+"<)~', $body, $number);

regex101 demo.

此正则表达式依赖于包含电话号码的部分中有引号这一事实(否则,您可能会在电子邮件正文中更早地出现数字)。如果前面没有数字,你可以简单地使用:

preg_match('~[0-9]+~', $body, $number);

【讨论】:

  • 不错!只需要小修改:preg_match_all("~[0-9\-\(\)' ']+~", $message, $aMatches); ... if(strlen($data) &gt; 5){ ...
  • @Robert Oh,我忘了提一下,您可以使用 ~[0-9()' -]+~ 使正则表达式更短一点(您不需要在字符类中转义元字符)。请注意,它将匹配数字、单引号、空格、括号和破折号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2017-09-20
  • 2016-04-12
  • 1970-01-01
  • 2014-05-16
  • 2015-09-25
  • 2018-07-28
相关资源
最近更新 更多