我正在尝试使用正则表达式隐藏电子邮件地址,除了前两个字符和电子邮件域。
在这种情况下,该函数将替换我想要保留的字符。
email.replace(/^[A-Za-z]{2}/, "**" ).replace(/@[^:]*/, "**" )
我得到什么:email@domain.com > **ail**
预期:em***@domain.com
这里有谁知道如何更改我的正则表达式以获得预期的结果?
谢谢!
这对我来说非常有效:
const email = "username@domain.tld"
const partialEmail = email.replace(/(w{3})[w.-]+@([w.]+w)/, "$1***@$2")
console.log(partialEmail)
它捕获第一组中的前 3 个字符(只需根据需要替换数字(和第二组中的域。
我只能通过replace
中的函数来实现这一点。不确定仅使用正则表达式是否可以实现。看看吧:
let hideEmail = function(email) {
return email.replace(/(.{2})(.*)(?=@)/,
function(gp1, gp2, gp3) {
for(let i = 0; i < gp3.length; i++) {
gp2+= "*";
} return gp2;
});
};
document.querySelector("button").addEventListener("click", function() {
let emailField = document.querySelector("input");
console.log(hideEmail(emailField.value));
});
<input type="email" value="abcdef@gmail.com">
<button>Hide e-mail</button>
你可以试试这个,显示前两个字符,其余的总是***
在用户部分:
var email = "exampleexample@example.com";
let hide = email.split("@")[0].length - 2;//<-- number of characters to hide
var r = new RegExp(".{"+hide+"}@", "g")
email = email.replace(r, "***@" );
console.log(email)
我不知道这三个*
是否是一个要求,但我认为是个好主意,因为你隐藏了真正的长度。
你也可以有这个,(?<=^[A-Za-z0-9]{2}).*?(?=@)
演示
我在飞镖的颤动中找到了一个解决方案
"example@gmail.com".replaceRange(
0,
"example@gmail.com"
.indexOf("@") -
3,
"****")
它将显示这样的结果-ple@gmail.com