2016-06-27 1 views
0

У меня есть страница «забыл письмо» в нашем приложении MEAN, где мне нужно показать электронное письмо подсказка/подсказка пользователю, если данные, предоставленные пользователем, успешно подтверждены.Как создать подсказку/подсказку электронной почты в этом формате (например, j*****[email protected]) с помощью javascript

Предположим, у пользователя есть следующее электронное письмо: [email protected].

Подсказка должна быть отображена в следующем формате: j*****[email protected].

Я пробовал использовать split() и replace(), и я могу привести результат в следующем формате: *******@example.com.

Вопрос сейчас в том, что первого и последнего символа перед @ символом также заменены, которые не должен быть.

Я создал простой код, чтобы показать свое текущее решение ниже.

angular.module('app', []).controller('TestController', ['$scope', function($scope) { 
 
    var email = '[email protected]'; 
 
    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>

Я был бы очень признателен за любую помощь. Благодарю.

+0

Что вы пытаетесь достичь, запутывая электронную почту? – TZHX

+1

Я просто хотел указать, что наличие фактической полной электронной почты на странице может быть уязвимостью безопасности. Если в любом случае вы будете иметь его на странице, зачем вам это делать, может быть, вы должны сделать это на стороне сервера? –

+0

Я не уверен, но вы используете регулярное выражение, не так ли? '$ scope.emailClue = emailParts [0] .replace (/./ gi, '. *.') + '@' + emailParts [1];' – RaV

ответ

4

Попробуйте отредактировать код: он берет первую часть письма (имя пользователя), берет первую букву и последнюю букву, превращает остальные в звездочки, а затем снова соединяет их.

angular.module('app', []).controller('TestController', ['$scope', function($scope) { 
 
    var email = '[email protected]'; 
 
    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>

+0

Спасибо Джонатан. Это прекрасно. Я буду принимать ваш ответ позже, как только смогу .. :) –

+0

@alex_andrea Я рад, что это вам помогло! –

1

Вы можете попробовать следующий код, который заменяет все символы после первого на адрес электронной почты.

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

+0

[email protected] не работает, и вы забыли a. до @ – Destrif

+0

Спасибо! +1 для вас, так как я уже принял другой ответ. –

1

Вы можете основывать перевод на позицию @ характера и конкатенации подстрок в ваш результат:

angular.module('app', []).controller('TestController', ['$scope', function($scope) { 
    var email = '[email protected]'; 
    var i = email.indexOf('@')-1; 
    $scope.emailClue = email[0] + Array(i).join("*") + email.substring(i); 

    console.log($scope.emailClue); 
}]) 
// => "j*****[email protected]" 
// ref: http://stackoverflow.com/questions/1877475/repeat-character-n-times 

согласны с проблемами комментаторов об этом только добавив внешний вид безопасности при наличии полной электронной почты указывается на стороне клиента

+0

Как я уже упоминал в своих последних комментариях, эта логика выполняется на стороне сервера, и я передаю подсказку по электронной почте только на стороне клиента. Спасибо за вашу помощь. :) –

1

Другое решение, без регулярного выражения.

angular.module('app', []).controller('TestController', ['$scope', function($scope) { 
 
    var email = '[email protected]'; 
 
    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>

+1

Это немного дольше, чем при использовании Regex, но в любом случае спасибо. :) –

1

Вы можете использовать функцию .charAt(index)

В вашем примере, вы можете изменить свой код так:

angular.module('app', []).controller('TestController', ['$scope', function($scope) { 
var email = '[email protected]'; 
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); 
}]) 

Вы можете использовать метод .slice везде вместо charAt, но я нахожу, что charAt is more cle ar!

Надеюсь, это поможет.

+0

он уже решен, но спасибо за то, что он представил другое решение. :) –

Смежные вопросы