如何在JavaScript中用*替换@之前的电子邮件ID文本?

时间:2018-07-09 11:35:05

标签: javascript

我正在尝试在React Js中重置密码。我需要显示该电子邮件已发送到他们的电子邮件ID。我不想显示他们的整个电子邮件,而是想用*替换某些字符。 例如,某人有一封电子邮件testing@gmail.com,所以我想用*替换一个随机字符,即tes***g@gmail.com。 我该如何在JavaScript中做到这一点? 我的代码:

let a = testing@gmail.com
let c = a.split('@');
let b = c[0].slice(0,-3)+'***'+'@'+c[1];

但这不是有效的方法。如何有效地做??

假设我有test@gmail.com,那么它应该显示t**t@gmail.com,如果有@ gmail.com,它应该像a*y@gmail.com。

2 个答案:

答案 0 :(得分:1)

使用此:

 var input = "testing@gmail.com";

function callme(){
    var a = input.split("@"); 
    var b = a[0];
    var newstr = "";
    for(var i in b){
     if(i>2 && i<b.length-1)newstr += "*";
     else newstr += b[i];
    }
    console.log(newstr +"@"+ a[1]);
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="callme()">click me</button>

答案 1 :(得分:1)

您已经开始:将各部分分成几部分,并在第一部分中应用算法来替换一些字符,然后再次加入这些位。

以下内容基于始终保留最后一个字符并替换至少一个前导字符的公式替换了第一部分的一部分。随着字符串变长,它将替换更多的前导字符。

调整生成 startIndex endIndex 值的乘数以替换更多或更少的字符。

function mungeEmailAddress(s) {
  var i = s.indexOf('@');
  var startIndex = i * .2 | 0;
  var endIndex   = i * .9 | 0;
  return s.slice(0, startIndex) +
         s.slice(startIndex, endIndex).replace(/./g, '*') +
         s.slice(endIndex);
}

// Testing...
for (var s='', t = '@foo.com', i=97; i<110; i++) {
  s += String.fromCharCode(i);
  console.log(s + t + ' => ' + mungeEmailAddress(s + t));
}