regex 部分屏蔽电子邮件地址- javascript

eoxn13cs  于 2022-11-26  发布在  Java
关注(0)|答案(5)|浏览(212)

如何在Javascript中部分隐藏这样的电子邮件地址?

examplemail@domain.com => ex**pl**ai*@domain.com

我已经修改了下面的代码,但是可以得到我所需要的结果,它只是返回这个结果:
exam*******@domain.com

email.replace(/(.{4})(.*)(?=@)/, function (gp1, gp2, gp3) {
for (let i = 0; i < gp3.length; i++) {
  gp2 += "*";
}
return gp2;

});

guz6ccqo

guz6ccqo1#

你可以搜索一组四个字符,然后替换一组两个字符,直到你找到一个@符号-

const
    mask = string => string.replace(
        /(..)(.{1,2})(?=.*@)/g,
        (_, a, b) => a + '*'.repeat(b.length)
    );

console.log(mask('examplemail@domain.com'));
yv5phkfx

yv5phkfx2#

这是解决问题的一种方法:

function f(mail) {
  let parts = mail.split("@");
  let firstPart = parts[0];
  let encrypt = firstPart.split("");
  let skip = 2;
  for (let i = 0; i < encrypt.length; i += 1) {
    if (skip > 0) {
      skip--;
      continue;
    }
    if (skip === 0) {
      encrypt[i] = "*";
      encrypt[i + 1] = "*";
      skip = 2;
      i++;
    }
  }
  let encryptedMail = `${encrypt.join("")}@${parts.slice(1)}`;
  return encryptedMail;
}
368yc8dk

368yc8dk3#

"只要这样做"

function maskFunc(x) {
    var res = x.replace(/(..)(.{1,2})(?=.*@)/g,
     (beforeAt, part1, part2) => part1 + '*'.repeat(part2.length)
    );  
    
    return res
}

console.log(maskFunc('emailid@domain.com'));
bzzcjhmw

bzzcjhmw4#

作为可接受答案的正则表达式,我建议通过使用一个非字符类[^\s@]来匹配除空格字符或@本身之外的任何字符,从而确保只匹配一个@符号。
这样,您也可以将它用于多个电子邮件地址,因为使用带有多个@符号的(?=.*@)可能会给予意外的结果。

([^\s@]{2})([^\s@]{1,2})(?=[^\s@]*@)

Regex demo
在您尝试的模式中,您使用(.{4})匹配了4次任何字符。重复4个字符可以使用正lookbehind来完成。然后您可以在没有组的情况下获得匹配。
首先向左Assert一个空白边界。然后从2个字符的偏移量开始,可选地重复4个字符。
然后匹配1个或2个字符,并在右侧声明@。

const partialMask = s => s.replace(
  /(?<=(?<!\S)[^\s@]{2}(?:[^\s@]{4})*)[^\s@]{1,2}(?=[^\s@]*@)/g,
  m => '*'.repeat(m.length)
);
console.log(partialMask("examplemail@domain.com"));
olmpazwi

olmpazwi5#

如果您只想替换@附近的数字,并允许它根据长度添加 *,您可以这样做

const separatorIndex = email.indexOf('@');
    if (separatorIndex < 3)
        return email.slice(0, separatorIndex).replace(/./g, '*')
            + email.slice(separatorIndex);

    const start = separatorIndex - Math.round(Math.sqrt(separatorIndex)) - 1;

    const masked = email.slice(start, separatorIndex).replace(/./g, '*');
    return email.slice(0, start) + masked + email.slice(separatorIndex);

相关问题