如何在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;
});
答案 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@]*@)
在您尝试的模式中,您使用(.{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"));