如何使用JavaScript以这种格式生成电子邮件线索/提示(ex.jtem.jethy@example.com)



我在我们的卑鄙应用中有一个"忘记电子邮件"页面,如果成功验证了用户提供的详细信息,我需要向用户显示电子邮件/提示。

假设用户有以下电子邮件: janedoe@example.com

提示应以以下格式显示: j*****e@example.com

我尝试使用split()replace(),我能够以以下格式产生结果:*******@example.com

目前的问题是 first last @符号之前也更换了不应 。/p>

我创建了一个简单的代码来显示我当前的解决方案。

angular.module('app', []).controller('TestController', ['$scope', function($scope) {
  var email = 'janedoe@example.com';
  var emailParts = email.split('@');
  $scope.emailClue = emailParts[0].replace(/./gi, '*') + '@' + emailParts[1];
  
  console.log($scope.emailClue);
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="TestController">
  <p>Our records show your email address as {{ emailClue }}. Please use this email to log in.</p>
</div>

我真的很感谢任何帮助。谢谢。

尝试使用您的代码编辑:它采用电子邮件的第一部分(用户名),拿了第一封信和最后一封信,将其余的星号变成星号,然后将它们加入再次在一起。

angular.module('app', []).controller('TestController', ['$scope', function($scope) {
  var email = 'janedoe@example.com';
  var emailParts = email.split('@');
  /* EDITED SECTION */
  var firstLetter = emailParts[0].substring(0, 1);
  var lastLetter = emailParts[0].substring(emailParts[0].length-1, emailParts[0].length);
  emailParts[0] = emailParts[0].substring(1,emailParts[0].length-1);
  $scope.emailClue = firstLetter + emailParts[0].replace(/./gi, '*') + lastLetter + '@' + emailParts[1];
  /* END EDITED SECTION */
  
  console.log($scope.emailClue);
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="TestController">
  <p>Our records show your email address as {{ emailClue }}. Please use this email to log in.</p>
</div>

您可以尝试以下代码,该代码在电子邮件中的第一个字符后替换所有字符。

console.log('test@test.fr'.replace(/^(.*)(@.*)$/, function(str, firstMatch, secondMatch) {
  return str[0] + Array(firstMatch.length - 1).join('*') + firstMatch[firstMatch.length - 1] + secondMatch;
}));

另一种解决方案,没有正则

angular.module('app', []).controller('TestController', ['$scope', function($scope) {
  var email = 'janedoe@example.com';
  var emailParts = email.split('@');
  var mid = ''
  var name = emailParts[0];
  var nameRep = name.substring(1,name.length-1);
  for(i=nameRep.length;i>0;i--)
  mid+='*';
  var final = name.replace(nameRep, mid);
  $scope.emailClue = final + '@' + emailParts[1];
  
  console.log($scope.emailClue);
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="TestController">
  <p>Our records show your email address as {{ emailClue }}. Please use this email to log in.</p>
</div>

您可以使用函数.charAt(index)

在您的示例中,您可以这样更改代码:

angular.module('app', []).controller('TestController', ['$scope', function($scope) {
var email = 'janedoe@example.com';
var emailParts = email.split('@');
var lengthName = emailParts[0].length;
var firstChar = emailParts[0].charAt(0); // j
var lastChar = emailParts[0].charAt(lengthName - 1); // e
$scope.emailClue = emailParts[0].replace(/./gi, '*') + '@' + emailParts[1];
$scope.emailClue = $scope.emailClue.charAt(0).replace('*', firstChar); // replace the first char by j
$scope.emailClue = $scope.emailClue.slice(0, -1) + lastChar // deletes the last character and add the last char (e)
console.log($scope.emailClue);
}])

您可以在任何地方而不是charAt使用.slice方法,但是我发现charAt更清楚!

希望它有帮助。

您可以将翻译基于@字符的位置,然后将子字节串成结果:

angular.module('app', []).controller('TestController', ['$scope', function($scope) {
    var email = 'janedoe@example.com';
    var i = email.indexOf('@')-1;
    $scope.emailClue = email[0] + Array(i).join("*") + email.substring(i);
    console.log($scope.emailClue);
}])
// => "j*****e@example.com"
// ref: http://stackoverflow.com/questions/1877475/repeat-character-n-times

同意评论者对此的担忧,仅添加了全部电子邮件的安全外观,显示了客户端

最新更新