2016-03-27 17 views
0

Bir kullanıcının parola yazıp 6 ile 10 arasında karakter içerdiği ve bir büyük harf, bir küçük harf ve bir sayı içermesi gereken bir parola doğrulama projesi üzerinde çalışıyorum.Actionscript 3 Parola Doğrulayıcı Parolaları Eşleştirmiyor

Programı sınarken ve bir parola yazarken "Parolalar MATEME DEĞİLDİR. Tekrar deneyin." feedback_txt alanında.

Gönder düğmesinin olay işleyicisi tarafından çağrılan iki işlevi var: Same() ve PasswordApproved(). Aynı işlev, parolanın iki kez girildiğini doğrular. PasswordApproved işlevi, şifrenin belirtilen standartları karşıladığını doğrular.

PasswordApproved bölümüne yardımcı olmak için CharCodeAt kullanmak için bir ipucu veriyordum, ancak bunu nasıl yapacağımı anlayamıyorum. Bu benim (.? Bunun ben doğru yazmıyorum yoksa sadece yanlış çalışmıyor nedeni olduğunu düşünüyorum) işlevleri için ne var

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; 
} 

: Burada

Kod var

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; 
} 

cevap

0

Sen mesela böyle, tek if deyimi ve bir RegExp nesnesini kullanarak yapmaya çalıştığınız şeyi yapabilirsiniz:

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.'); 
} 

normal ifadelerin kullanılmasıyla ilgili daha fazla bilgi için göz here atın.

Düzenleme:

doğru Same fonksiyonunu kullanmak için, bunu bir tür vermek ettik, sizin durumunuzda bu Boolean var ve sonra böyle sonuçlanır karşılaştırma dönmek:

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

Düzenleme 2:

PasswordApproved() işleviniz, yalnızca doğruladığınız için parolanızı doğrulayabilir Her iki parola da aynı. Yani böyle olabilir:

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

o zaman arayabilirsiniz: yardımcı olabilir

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; 
} 

Umut.

+0

Önerdiğin şeyi denedim ama hala "Parolalar DEĞİLDİ DEĞİLDİR. Tekrar dene." Kodumun geri kalanını yayınladım, ama aynı işlevin, çalışmadığının nedeni olduğunu düşünüyorum. Her iki şifrenin de eşleşmesi için bir yol var mı? – Tams

+0

@Tams Daha önce de belirttiğim gibi, 'Same' işlevine bile ihtiyacınız yoktur çünkü metin alanlarınızın bu "if" ifadesiyle aynı olduğunu doğrularsınız, ancak her zaman kullanmayı seviyorsanız, cevabını senin için düzeltmek için. – akmozo

+0

Teşekkür ederim, akmozo. Test ettim ve her şey yolunda gidiyor. – Tams

0

Same işlevinin ne yapmasını bekliyorsunuz?

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

Bu fonksiyon bu durumda asla Çünkü o zaman

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

gibi bir şey yazarken çok yapmaz, yani void döndürür.

İlgili konular