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

Javascript 使用正则表达式对垃圾邮件机器人隐藏电子邮件地址,javascript,regex,preg-replace,Javascript,Regex,Preg Replace,我在网页上动态呈现多个电子邮件地址(邮件收件人:) 我忘了需要隐藏这些垃圾邮件机器人 最简单的解决方案是: 这包括在电子邮件地址中添加一个假字符:“X”,然后在单击、复制或粘贴链接后删除这些字符 它可以工作-但是缺点是它会从地址中删除所有的“x”。由于我不能保证我的动态呈现电子邮件不会包含“x”这个解决方案,它不适合我 更好的解决方案是在每个电子邮件地址的开始/结束处放置3个或更多的“X”,然后在单击链接后使用上述代码将其删除 i、 e: 我现在需要做的是使用正则表达式,然后在单击电子邮

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

我忘了需要隐藏这些垃圾邮件机器人

最简单的解决方案是:


这包括在电子邮件地址中添加一个假字符:“X”,然后在单击、复制或粘贴链接后删除这些字符

它可以工作-但是缺点是它会从地址中删除所有的“x”。由于我不能保证我的动态呈现电子邮件不会包含“x”这个解决方案,它不适合我

更好的解决方案是在每个电子邮件地址的开始/结束处放置3个或更多的“X”,然后在单击链接后使用上述代码将其删除

i、 e:


我现在需要做的是使用正则表达式,然后在单击电子邮件地址时从电子邮件地址中删除前3个“x”

我尝试了以下方法,但无效:

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

您可以尝试以下方法

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


它基本上会替换出现的
^$^
而不是常见的
X
XXX

replace
方法需要两个参数—第一个是匹配的正则表达式,第二个是要替换匹配的值。我们还希望您的正则表达式模式具有解释匹配行为的标志。例如,
g
将在其操作的字符串上全局匹配,
i
将以不区分大小写的方式匹配

您在这里所使用的正则表达式可能更符合以下内容:

^(mailto\:)x{3}(.*)x{3}$
也就是说,您的目标是捕获
mailto:
,它应该位于字符串的开头,然后丢弃3个
x
x
字符,然后捕获电子邮件地址,但不捕获字符串末尾的3个
x
x
字符

这将以以下方式适用于
replace
方法:

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

这就是说,电子邮件地址可能倾向于连续包含
x
x
字符,这难道不公平吗?如果是这样,您应该用电子邮件地址中不太可能包含的内容替换每次出现的
x{3}
以及您在电子邮件地址前/后添加的相应匹配项,或者设计一种解决问题的替代方法。

我会避免在您的邮件地址中添加更多或更少的常用字符,以达到混淆的目的。而是尝试一些非常基本的加密,例如切换位或逐字符获取字符串,并将字符代码增加一个固定值。
例如:

var mailto=“mailto:contact@domain.com";
var-obfuscated=“”;
for(设i=0;i

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

通常,出于这个目的,会添加很少使用的符号。或者添加一个非常不常见的字符串。
x
很常见,不是吗?“我忘了需要对垃圾邮件机器人隐藏这些信息”-胡说八道。垃圾邮件发送者迟早会从被他们黑客攻击的其他人的联系人列表中获得地址,只需猜测,……现在,他们应该投资于一个合适的垃圾邮件过滤器,而不是像这样的胡说八道的措施(如果禁用JS的f.e.用户需要获得地址,这会使整个事情无法进行)是的,CBroe。没有一种方法是完全防弹的。我们所要做的就是减少攻击的数量——垃圾邮件过滤器确实会被部署。但拥有一个前端过滤器仍然是值得的。Hi Charles。我试过了,但它不起作用。下面是我的代码:我的道歉,我打算用引号括住
replace
的第二个参数已相应地编辑了解决方案。
^(mailto\:)x{3}(.*)x{3}$
.replace(/^(mailto\:)x{3}(.*)x{3}$/i, '$1$2')
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"