我在我们的卑鄙应用中有一个"忘记电子邮件"页面,如果成功验证了用户提供的详细信息,我需要向用户显示电子邮件/提示。
假设用户有以下电子邮件: 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
同意评论者对此的担忧,仅添加了全部电子邮件的安全外观,显示了客户端