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

Partially mask email address - javascript

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

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

我已经修改了下面的代码,但是可以得到我需要的结果,就是return这个结果:

考试*****@domain.com

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

});

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

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

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

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

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;
}

就这么办

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'));

作为已接受答案的正则表达式,我建议通过使用 negated character class [^\s@] 匹配除空白字符或 @ 之外的任何字符来确保仅匹配单个 @ 符号本身。

这样您也可以将它用于多个电子邮件地址,因为将 (?=.*@) 与多个 @ 符号一起使用会产生意想不到的结果。

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

Regex demo


在您尝试的模式中,您使用 (.{4}) 匹配了任何字符 4 次。重复 4 个字符可能会使用正后视来完成。然后你可以只匹配没有组。

首先断言左侧的空白边界。然后以 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"));