Actionscript 3密码验证程序不匹配密码

时间:2016-03-27 18:09:09

标签: actionscript-3 flash

我正在进行一个Flash密码验证项目,用户输入的密码为6到10个字符,并且必须包含一个大写,一个小写和一个数字。

当我测试程序并输入密码时,我得到了"密码不匹配。再试一次。"在feedback_txt字段中。

我有两个由Submit按钮的事件处理程序调用的函数:Same()和PasswordApproved()。 Same函数验证两次输入的密码。 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 = "abchefghjkmnpqrstuvwxyzQWERTYUIOPLKJHGFDSAZXCVBNM0123456789";
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;
}

2 个答案:

答案 0 :(得分: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) {

因为情况永远不会如此。

答案 1 :(得分: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;
}

希望可以提供帮助。