使用正则表达式隐藏垃圾邮件机器人的电子邮件地址

时间:2017-09-05 10:40:24

标签: javascript regex preg-replace

我在网页上动态呈现多个电子邮件地址(邮件到:)。

我无意中需要将这些隐藏在垃圾邮件机器人中。

found is this的最简单的解决方案:

<a href="mailto:coxntact@domainx.com" onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

这涉及到假人物:&#34; X&#34;在电子邮件地址中,然后在单击,复制或粘贴链接后删除这些内容。

它有效 - 但缺点是它会从地址中删除所有&#34; x&#34;因为我无法保证我的动态呈现的电子邮件不会包含&#34; x&#34;这个解决方案 - 因为它不适合我。

更好的解决方案是将3个或更多&#39; X&#39;在每个电子邮件地址的开头/结尾,然后在点击链接后使用上面的代码删除它们

即:

    <a href="mailto:XXXcontact@domain.comXXX"
onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

我现在需要做的是使用正则表达式然后删除前3&#39; x&#39;单击时单击电子邮件地址

我尝试了以下但是它不起作用:

  <a href="mailto:xxxcontact@domain.comXXX"
onmouseover="this.href=this.href.replace(^[\s\S]{0,3});">link</a>   

3 个答案:

答案 0 :(得分:1)

replace方法需要两个参数 - 首先是您要匹配的正则表达式,其次是您要替换的值匹配的参数。预计你的正则表达式模式将有标志来解释匹配的行为。例如,g将匹配它在全局运行的字符串,i将以不区分大小写的方式匹配。

你在这之后的正则表达可能更符合以下几点:

^(mailto\:)x{3}(.*)x{3}$

也就是说,您的目标是捕获mailto:(预期在字符串的开头),然后丢弃3 xX个字符,然后捕获电子邮件地址,但不是字符串末尾预期的3个xX字符。

这将以下列方式适合replace方法:

.replace(/^(mailto\:)x{3}(.*)x{3}$/i, '$1$2')

那就是说,电子邮件地址可能会连续包含xX个字符,这是不公平的吗?如果是这样,您应该替换每次出现的x{3}以及您在电子邮件地址前添加/附加的相应匹配项,以及不太可能包含在电子邮件地址中的内容,或设计替代方法问题。

答案 1 :(得分:0)

你可以尝试一下

<a href="mailto:^$^contact@domain.com^$^" onmouseover="this.href=this.href.replace(/[\^][\$][\^]/g,'');">link</a>

它基本上会取代^$^的出现,而不是XXXX

的常见内容

答案 2 :(得分:0)

为避免混淆,我会避免在您的邮件地址中添加更多或更少的常用字符。而是尝试某种非常基本加密,例如切换位或通过char取字符串char,并将char代码增加固定值。
例如:

var mailto = "mailto:contact@domain.com";
var obfuscated = "";
for (let i = 0; i < mailto.length; i++) {
    obfuscated += String.fromCharCode(mailto.charCodeAt(i) + 7);
}
//obfuscated now looks like this: "thps{vAjvu{hj{Gkvthpu5jvt"
//to reverse the process, do the same thing and subtract 7.
//You could extract the code to a method that you simply call with "onmouseover"

希望这有帮助,尽管没有准确回答你的问题:)