2016-03-27 8 views
0

私は、ユーザーが6〜10文字のパスワードを入力し、大文字、小文字、および1つの数字を含むフラッシュパスワード検証プロジェクトに取り組んでいます。Actionscript 3パスワードベリファイアがパスワードと一致しない

プログラムをテストしてパスワードを入力すると、「パスワードが一致しません。もう一度お試しください」というメッセージが表示されます。 feedback_txtフィールドに入力します。

私はSubmitボタンのイベントハンドラによって呼び出される2つの関数Same()とPasswordApproved()を持っています。同じ機能は、パスワードが両方の時刻に入力されたことを確認します。 PasswordApproved関数は、パスワードが指定された標準を満たしていることを確認します。

私はCharCodeAtを使用してPasswordApproved部分を助けるヒントを与えていましたが、その方法を理解できないようです。

ここではコードです:

submit_btn.addEventListener(MouseEvent.CLICK,Submit); 
function Submit(e:MouseEvent):void { 
var pass1:String = password1_txt.text; 
var pass2:String = password2_txt.text; 
if (Same(pass1,pass2) == true) { 
if (PasswordApproved(pass1) == true) { 
     feedback_txt.text = "Your password was APPROVED." 
     feedback_txt.textColor = 0x00FF00; 
} else { 
     feedback_txt.text = "DID NOT MEET QUALIFICATIONS. Try again." 
     feedback_txt.textColor = 0xFF0000; 
} 
} else { 
    feedback_txt.text = "Passwords DID NOT MATCH. Try again." 
    feedback_txt.textColor = 0xFF0000; 
} 
password1_txt.text = ""; 
password2_txt.text = ""; 
stage.focus = password1_txt; 
} 

これは私が機能するために持っているものである(私はそれを正しく書いていないよか、それだけで間違っている、これはそれが働いていない理由でもあると思いますか?。):

function Same(pass1,pass2:String):void { 
var pass1:String = password1_txt.text; 
var pass2:String = password2_txt.text; 
} 


function PasswordApproved(pass1:String):String { 
var pass1:String = "abchefghjkmnpqrstuvwxyzQWERTYUIOPLKJHGFDSAZXCVBNM"; 
var i:Number = 0; 
var pass:String = ""; 
var nLength:Number = pass1.length; 
var length:Number = 10 
while(i<=length) 
{ 
    var num:Number = Math.round(Math.random() * nLength); 
    pass += pass1.charCodeAt(num); 
    i++; 
} 
return pass; 
} 

答えて

0

は、あなたは、たとえば次のように、1つのifの文と1つのRegExpオブジェクトを使って何をしようとして行うことができます。

var password_pattern:RegExp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,10}$/; 
//        │  │   │   │  
//        │  │   │   └─> from 6 to 10 chars 
//        │  │   │ 
//        │  │   └─> at least one upper letter 
//        │  │ 
//        │  └─> at least one lower letter 
//        │ 
//        └──> at least one digit 

if(password1_txt.text == password2_txt.text && password_pattern.test(password1_txt.text)) { 
    trace('Your password was APPROVED.'); 
} else { 
    trace('Your password was NOT APPROVED.'); 
} 

正規表現を使用する方法の詳細については、見hereを取ります。

編集:

正しくSame機能を使用するには、あなたがそれをタイプを与えることをしました、あなたのケースではBooleanだし、このように比較結果を返します。

function Same(pass1, pass2:String): Boolean 
{ 
    return pass1 == pass2; 
} 

を編集2:

あなたのPasswordApproved()機能は、あなたが既に確認しているためにパスワードを確認することしかできません両方のパスワードが同じであること。だから、このようなことができます:

function PasswordApproved(pass:String):Boolean 
{ 
    var password_pattern:RegExp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,10}$/; 
    return password_pattern.test(pass); 
} 

その後、あなたはそれを呼び出すことができます助けることができる

if (Same(pass1, pass2)) {    // the same as : Same(pass1, pass2) == true 
    if (PasswordApproved(pass1)) {  // the same as : PasswordApproved(pass1) == true 
     feedback_txt.text = "Your password was APPROVED." 
     feedback_txt.textColor = 0x00FF00; 
    } else { 
     feedback_txt.text = "DID NOT MEET QUALIFICATIONS. Try again." 
     feedback_txt.textColor = 0xFF0000; 
    } 
} else { 
    feedback_txt.text = "Passwords DID NOT MATCH. Try again." 
    feedback_txt.textColor = 0xFF0000; 
} 

希望。

+0

私はあなたが示唆したことを試しましたが、私はまだ "パスワードが一致しませんでした。もう一度お試しください。"私はコードの残りの部分を投稿しましたが、私は同じ機能が働いていない理由だと思います。両方のパスワードが一致するようにする方法はありますか? – Tams

+0

@Tamsすでに言及したように、 'if'文を使用してテキストフィールドが同じであることを確認するので、' Same'関数は必要ありませんが、いつも使っているのが好きなら編集します私の答えはあなたのためにそれを修正する。 – akmozo

+0

ありがとう、akmozo。私はテストし、すべてがうまくいきました。 – Tams

0

Same機能は何を期待していますか?

function Same(pass1,pass2:String):void { 
var pass1:String = password1_txt.text; 
var pass2:String = password2_txt.text; 
} 

この関数は、それがケースになることはありませんので、あなたが、その後

if (Same(pass1,pass2) == true) { 

のようなものを書くとき、それはあまり行っていないという意味、void返します。

関連する問題