使用***替换字符并截断电子邮件

时间:2014-09-18 16:19:17

标签: ruby-on-rails ruby

如何在轨道上的红宝石中编写电子邮件,例如alibaba@gmail.com到a***a@g***l.c*m?

当我尝试将密码恢复到我的Gmail帐户时,我发现了这一点。

2 个答案:

答案 0 :(得分:2)

如果您已将电子邮件分为addressdomain,则这会更容易。但要简单地做到这一点:

email = 'alibaba@gmail.com'
address, domain = email.split('@')

如果您不关心每个令牌的第一个和最后一个之间的字符数:

"#{address[0]}***#{address[-1]}"

对于@之前的a ** a,可以对域进行类似操作,但在.字符上使用split:

working_domain = domain.split('.')
"#{working_domain[0][0]}***#{working_domain[0][-1]}.#{working_domain[1][0]}*#{working_domain[1][-1]}"

这是一个非常丑陋的方式来做它并且它不是非常干燥而且不关心角色数量。您应该能够将所有这些封装到函数或3中,并使这更简单易用。

答案 1 :(得分:1)

从您在问题中提供的示例(" alibaba@gmail.com" =>" a *** a @ g *** lc * m"),您似乎不需要*的数量来匹配替换字符的数量。如果是这种情况,您可以通过简单的正则表达式替换来解决此问题,不需要拆分或解析所需的地址:

email = 'alibaba@gmail.com'
email.gsub(/(?<=[\w\d])[\w\d]+(?=[\w\d])/, "**") 
# => "a**a@g**l.c**m"

为了清晰起见,打破正则表达式:[\w\d]+匹配字母数字字符串,不包括左边的一个字母数字((?<=[\w\d]))和另一个字体((?=[\w\d]))匹配组,并用&#34; **&#34;。

替换每个匹配

我希望这会有所帮助。