Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-在字符串中搜索电子邮件地址的不同变体_Php_Preg Replace - Fatal编程技术网

PHP-在字符串中搜索电子邮件地址的不同变体

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

我试图弄明白如何使用PHP preg_replace将字符串中的电子邮件地址替换为(email hidden)。我正在构建一个应用程序,我不希望客户发布他们的联系信息。大多数人开始通过以下方式变得聪明:

詹姆斯(at)雅虎网站

james在example.com

我怎样才能阻止这种事情发生

我如何将其添加到此中:

$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)点(\.|点)中删除+。但它仍然符合这种模式。可以更严格一些,但我认为提问者的目的是尽可能多地抓住。