2016-06-27 1 views
0

MEANアプリケーションで電子メールを表示する必要がある「電子メールを忘れました」ページがありますユーザーが提供した詳細が正常に検証された場合は、ユーザーにヒント/ヒントを提示します。javascriptを使用してこの形式(例:j*****[email protected])で電子メールのヒントを生成する方法

ユーザーが次のメールアドレスを持っているとします:[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

あなたは電子メールでの最初の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]は機能しません。あなたは\を忘れています。 @ – 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がよりcle ar!

希望します。

+0

これはすでに解決済みですが、別の解決策を提示してくれてありがとうございます:) –

関連する問題