PHP-在字符串中搜索电子邮件地址的不同变体
我试图弄明白如何使用PHP preg_replace将字符串中的电子邮件地址替换为(email hidden)。我正在构建一个应用程序,我不希望客户发布他们的联系信息。大多数人开始通过以下方式变得聪明: 詹姆斯(at)雅虎网站 james在example.com 我怎样才能阻止这种事情发生 我如何将其添加到此中:PHP-在字符串中搜索电子邮件地址的不同变体,php,preg-replace,Php,Preg Replace,我试图弄明白如何使用PHP preg_replace将字符串中的电子邮件地址替换为(email hidden)。我正在构建一个应用程序,我不希望客户发布他们的联系信息。大多数人开始通过以下方式变得聪明: 詹姆斯(at)雅虎网站 james在example.com 我怎样才能阻止这种事情发生 我如何将其添加到此中: $emailHidden = 'james at example dot com'; $emailHidden = 'james (at) example dot com'; $e
$emailHidden = 'james at example dot com';
$emailHidden = 'james (at) example dot com';
$emailHidden = 'james at example.com';
$emailHidden = preg_replace('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i','(email hidden)',$emailHidden); // extract email
此外,我仍然想删除常规电子邮件地址。例如james@yahoo.com如果您想将普通电子邮件替换为其他格式,可以尝试此方法
$email = 'somebody@anywhere.com';
$newEmail = preg_replace('/([A-Z0-9._%+-]+)@([A-Z0-9.-]+\.[A-Z]{2,4})/i', ' $1 (at) $2', $email);
echo $newEmail;
输出为:
somebody (at) anywhere.com
或者,如果要捕获其他正则表达式,则可以使用以下正则表达式:
$email = 'james at example dot com';
$emailHidden = preg_replace('/[A-Z0-9._%+-]+[^\s] at [A-Z0-9.-]+[^\s] dot [A-Z]{2,4}/i', 'hidden email', $email);
$email = 'james (at) example dot com';
$emailHidden = preg_replace('/[A-Z0-9._%+-]+[^\s] \(at\) [A-Z0-9.-]+[^\s] dot [A-Z]{2,4}/i', 'hidden email', $email);
$email = 'james at example.com';
$emailHidden = preg_replace('/[A-Z0-9._%+-]+[^\s] at [A-Z0-9.-]+\.[A-Z]{2,4}/i', 'hidden email', $email);
我想你要找的是:
$emailHidden = 'james at example dot com';
$emailHidden = 'james (at) example dot com';
$emailHidden = 'james at example.com';
$emailHidden = preg_replace('/[[A-Z0-9._%+-]+[ ]?[\(]?(@|at)[\)]?[ ]?[A-Z0-9.-]+[ ]?[\(]?(\.|dot)[)]?[ ]?[A-Z]{2,4}/i','(email hidden)',$emailHidden); // extract email
将捕获:
谷歌网站的詹姆斯james@google.com
james@google(dot)com
谷歌网站的詹姆斯
詹姆斯(at)谷歌(dot)com凯西,是的。。。我希望我的客户付费查看任何联系信息。$hideEmail='您好,您可以通过example.com与我联系。我问题中的上述代码适用于常规电子邮件地址。我正在努力保持领先一步。这与(@| at)点(\.|点)匹配。dotdotdot…AaAAAAAaaaaaaAAAAAA我已从(@| at)点(\.|点)中删除+。但它仍然符合这种模式。可以更严格一些,但我认为提问者的目的是尽可能多地抓住。