部分屏蔽电子邮件地址 - 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@]*@)
在您尝试的模式中,您使用 (.{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"));
如何在 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@]*@)
在您尝试的模式中,您使用 (.{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"));