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

using regular expression to hide email address from spam bots

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

我显然需要对垃圾邮件机器人隐藏这些内容。

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

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

这涉及在电子邮件地址中放置假字符:"X",然后在单击、复制或粘贴 link 后删除这些字符。

它有效——但缺点是它会从地址中删除所有 "x"。因为我不能保证我的动态呈现的电子邮件不会包含 "x" 这个解决方案 - 按原样,它不适合我。

更好的解决方案是在每个电子邮件地址的 start/end 处放置 3 个或更多 'X',然后在单击 link 后使用上面的代码删除它们

即:

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

我现在需要做的是使用正则表达式,然后在点击时从电子邮件地址中删除前 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>

它基本上会取代 ^$^ 而不是常见的 XXXX

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

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

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

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

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

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

也就是说,如果说电子邮件地址可能倾向于连续包含 xX 个字符,这是否公平?如果是这样,您应该将每次出现的 x{3} 和与您 prepending/appending 匹配的电子邮件地址替换为不太可能包含在电子邮件地址中的内容,或者设计一种替代方法来问题。

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

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"

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