使用RegEx和Javascript部分隐藏电子邮件地址

时间:2018-09-03 17:44:54

标签: javascript regex

我正在尝试使用RegEx隐藏电子邮件地址,但前两个字符和电子邮件域除外。

在这种情况下,该功能正在替换我要保留的字符。

email.replace(/^[A-Za-z]{2}/, "**" ).replace(/@[^:]*/, "**" )

我得到的是:email@domain.com > **ail** 预期:em***@domain.com

这里有谁知道我该如何更改RegEx以获得预期结果?

谢谢!

4 个答案:

答案 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}).*?(?=@)

Demo

答案 3 :(得分:0)

这对我来说非常有效:

const email = "username@domain.tld"
const partialEmail = email.replace(/(\w{3})[\w.-]+@([\w.]+\w)/, "$1***@$2")
console.log(partialEmail)

它捕获第一组中的前 3 个字符(只需根据您的需要替换数字)和第二组中的域。