【问题标题】:Regex formula for e-mail parsing of Instead @ to -> (at)用于电子邮件解析的正则表达式替换 @ 到 -> (at)
【发布时间】:2018-01-18 09:45:55
【问题描述】:

这是解析电子邮件文本的代码

<?php

 $res = preg_match_all(
    "/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i",
    $text,
    $matches
  );

?>

但我必须将其重新修改为

改为

@

解析

(在)

如何修改正则表达式?

【问题讨论】:

  • 您想删除电子邮件并发送垃圾邮件吗?

标签: php regex parsing


【解决方案1】:

很简单:替换

@

\(at\)

$res = preg_match_all(
    "/[a-z0-9]+([_\.-][a-z0-9]+)*\(at\)([a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}/i",
    $text,
    $matches
  );

注意双`反斜杠:

\\.

不需要转义点。

相反,必须转义(),因为它们在正则表达式中是meta-characters

此外,正如 cmets 中所建议的,您可以使用 @(at) 获取带有唯一正则表达式的电子邮件:

/[a-z0-9]+([_\.-][a-z0-9]+)*(@|\(at\))([a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}/i

【讨论】:

  • 这当然取决于他是否想继续匹配原始值,在这种情况下,您可以使用带有或[@|at]的字符类
  • @MattSmeets (@|\(at\))
【解决方案2】:

您可以使用filter_var方法,而不是使用RegEx来查找电子邮件是否有效。

<?php
$email = "john.doe@example.com";

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}
?>

可以在w3schools的教程中找到示例

【讨论】:

  • 这并没有真正回答这个问题,因为 OP 要求将 (at) 匹配为有效的电子邮件(至少看起来是这样)
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多