有时我的内容中有电子邮件地址-但我想用javascript模糊它们。
我做了一个前端的javascript解决方案,重建他们,但只能从一定的格式。
这是我需要HTML在电子邮件地址的格式:
<a email-a="firstbit" email-b="secondbit.com"></a>
然后Javascript运行一些代码并将HTML转换为如下格式:
<a href="mailto:firstbit@secondbit.com">[click to email]</a>
这些都很好。我的问题是如何让php从一个充满随机内容的HTML变量转换所有电子邮件地址,从所见即所得到不同的格式。如convert this:
bla bla bla firstbit@secondbit.com bla bla bla
:
bla bla bla <a email-a="firstbit" email-b="secondbit.com"></a> bla bla bla
我猜最后是这样的:
function change_emails($html){
// preg replace?
}
// $html is a variable full of HTML contents
$html = change_emails($html);
我已经知道如何在单个字符串中更改电子邮件地址-但我不知道如何更改所有可能在一大块内容中散布的电子邮件地址。
它使用一个相当简单的正则表达式(来自这个答案)来检测电子邮件地址,并将它们替换为html模板。
$pattern = "/([a-zA-Z0-9+._-]+)@([a-zA-Z0-9._-]+.[a-zA-Z0-9_-]+)/";
$template = '<a email-a="%s" email-b="%s">[click to email]</a>';
$str = "bla bla bla firstbit@secondbit.com bla bla bla";
return preg_replace_callback($pattern, function($matches) use ($template) {
[, $local, $host] = $matches;
return sprintf($template, $local, $host);
}, $str);
Demo ~ https://3v4l.org/CsPg3
使用正则表达式正确检测电子邮件地址可能相当复杂,所以如果你需要更全面的东西,请查看这个网站~ http://emailregex.com/