0

我正在尝试创建一个测试来检查密码的安全级别。问题是当已使用的正则表达式存储在数组“comprobaciones”中时,有时一个正则表达式会保存不止一次,所以当我检查数组“comprobaciones”的长度时,我可能会输出 1, 2 , 4、8 和 16。如何解决数组“comprobaciones”的长度与输出 1、2、3、4 和 5 类似的问题?我究竟做错了什么?帮助,谢谢。

是否有可能在任何 DEMO中出现问题

JAVASCRIPT

var compMay = /[A-ZÑ]/;
var compMin = /[a-zñ]/;
var compNum = /(?=.*\d)/;
var compCarEsp = /[!@#$%^&*(){}[\]<>+¿¡?/|.:;_-]/;
var compLong = /^.{8,}$/;
var seguridadPass = []; 
seguridadPass.push(compMin,compMay,compNum,compCarEsp,compLong);

function pintaValidar(numComp){


    if(numComp==1){
        $('#porcentaje').removeClass();
        $('#porcentaje').addClass('segurRojo');
        $('#porcentaje').css('width', '20%');
    }
    if(numComp==2){
        $('#porcentaje').removeClass();
        $('#porcentaje').addClass('segurRojo');
        $('#porcentaje').css('width', '40%');
    }
    if(numComp==4){
        $('#porcentaje').removeClass();
        $('#porcentaje').addClass('segurVerde');
        $('#porcentaje').css('width', '60%');
    }
    if(numComp==8){
        $('#porcentaje').removeClass();
        $('#porcentaje').addClass('segurVerde');
        $('#porcentaje').css('width', '80%');
    }
    if(numComp==16){
        $('#porcentaje').removeClass();
        $('#porcentaje').addClass('segurVerde');
        $('#porcentaje').css('width', '100%');
    }
    comprobaciones = [];

}

$(document).ready(function(){

comprobaciones = []

$('#psd').keyup(function(e){

    var pass = $(this).val();
    if(pass!=''){
        for(i=0;i<seguridadPass.length;i++){
            if(seguridadPass[i].test(pass)){
                //alert(seguridadPass[i]);

                if(comprobaciones.length==0){
                    comprobaciones.push(seguridadPass[i]);
                }
                else{
                    for(j=0;j<comprobaciones.length;j++){
                        if(comprobaciones[j]!=seguridadPass[i]){
                            comprobaciones.push(seguridadPass[i]);  
                        }
                    }
                }
            }
        }
        var numComp = comprobaciones.length
        pintaValidar(numComp);
    }
    else{
        $('#porcentaje').removeClass();
        $('#puntos').html('');
        comprobaciones.splice(0,comprobaciones.length);
    }
});

});
4

1 回答 1

0

你有2个循环。这个循环会导致错误。您将comprobaciones第二次添加到comprobaciones. 因此,您获得了*2.

for(j=0;j<comprobaciones.length;j++){
    if(comprobaciones[j]!=seguridadPass[i]){
        comprobaciones.push(seguridadPass[i]);  
    }
}

修复:

var contains = false;
for(j=0;j<comprobaciones.length;j++){
    if(comprobaciones[j]==seguridadPass[i]){
        contains = true;
    }
}
if( !contains ) {
    comprobaciones.push(seguridadPass[i]);
}

现场演示

于 2013-09-25T14:51:43.857 回答