我正在尝试使用RegEx隐藏电子邮件地址,但前两个字符和电子邮件域除外。
在这种情况下,该功能正在替换我要保留的字符。
email.replace(/^[A-Za-z]{2}/, "**" ).replace(/@[^:]*/, "**" )
我得到的是:email@domain.com > **ail**
预期:em***@domain.com
这里有谁知道我该如何更改RegEx以获得预期结果?
谢谢!
答案 0 :(得分:1)
您可以尝试执行此操作,在用户部分中始终显示前两个字符,并且始终***
:
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)
我不知道是否需要三个*
,但我认为这是一个好主意,因为您隐藏了真实长度。
答案 1 :(得分:0)
我只能使用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>
答案 2 :(得分:0)
您也可以拥有这个(?<=^[A-Za-z0-9]{2}).*?(?=@)
答案 3 :(得分:0)
这对我来说非常有效:
const email = "username@domain.tld"
const partialEmail = email.replace(/(\w{3})[\w.-]+@([\w.]+\w)/, "$1***@$2")
console.log(partialEmail)
它捕获第一组中的前 3 个字符(只需根据您的需要替换数字)和第二组中的域。