2016-03-27 53 views
0

我正在开发一个Flash密码验证项目,其中用户键入的密码为6到10个字符,并且必须包含一个大写,一个小写和一个数字。Actionscript 3密码验证程序不匹配密码

当我测试程序并输入密码时,我得到“密码不匹配,请重试。”在feedback_txt字段中。

我有两个由Submit按钮的事件处理函数调用的函数: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

你可以做你试图使用一个单一的if声明和一个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

我尝试了你的建议,但我仍然收到“密码不匹配,请重试。”我发布了其余的代码,但我认为Same函数是它不工作的原因。有没有办法让我确保两个密码匹配? – Tams

+0

@Tams正如我已经提到的,你甚至不需要'Same'函数,因为你使用'if'语句验证你的文本字段是相同的,但是如果你喜欢总是使用它,我会编辑我的答案是为你纠正它。 – akmozo

+0

谢谢你,akmozo。我测试过,现在一切正常。 – Tams

0

你在期待Same函数做什么?

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

该函数返回void,这意味着它不会做太多,当你再喜欢写东西

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

因为这永远不会是这样。