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

时间:2020-10-30 09:18:47

标签: javascript node.js regex string mask

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

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

我已经修改了下面的代码,但是可以获得我需要的结果,它只是返回这个结果:

考试******* @ domain.com

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

});

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

Route::post('welcome/product/{slug}', [LoginController::class, 'addComment'])->name("addComment"); 

答案 2 :(得分:0)

只需执行

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

答案 3 :(得分:0)

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

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

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

negated character class


在您尝试的模式中,您使用(.{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"));