簡體   English   中英

如何從JS的驗證過程中區分特殊字符

[英]How do I discriminate special characters from a validation process in JS

我正在用JS寫一個密碼驗證器(非常基本,這只是一個練習),當我嘗試驗證大小寫時,即使沒有一個或另一個,我也會得到一個“有效密碼”答案,只要其中有一個特殊字符 我知道為什么會發生這種情況,但是我想弄清楚的是如何在驗證小寫或大寫字母時排除特殊字符。 這是代碼:

 function ValidatePassword(input){ if(hasUppercase(input) && hasLowercase(input) && isLongEnough(input) && hasSpecialCharacters(input)){ console.log('The password is valid.'); }else if(!hasUppercase(input)){ console.log('The password needs at least one capital letter.'); }else if(!hasLowercase(input)){ console.log('The password needs at least one lowercase letter.'); }else if(!isLongEnough(input)){ console.log('The password needs to be at least 8 characters long.'); }else if(!hasSpecialCharacters(input)){ console.log('The password needs at least one special character.'); } } function hasUppercase(input){ for(var i = 0; i < input.length; i++){ if(input[i] === input[i].toUpperCase()){ return true; } } } function hasLowercase(input){ for (var i = 0; i < input.length; i++){ if(input[i] === input[i].toLowerCase()){ return true; } } } function isLongEnough(input){ if(input.length >= 8){ return true; } } function hasSpecialCharacters(input){ var specialCharacters = ["/", "*", "-", "+", "_", "@", "%", "&", "<", ">", "!", "(", ")", "$", "^", "\\\\", "#", ".", ",", ";", ":"]; for(var i = 0; i < input.length; i++){ for(var j = 0; j < specialCharacters.length; j++){ if(input[i] === specialCharacters[j]){ return true; } } } } 

無論如何,我會很感激您能給我的任何幫助

如下更改upperCase和lowerCase函數

 function hasLowercase(str) { return (/[az]/.test(str)); } function hasUppercase(str) { return (/[AZ]/.test(str)); } 

該密碼是有效的,因為hasUppercase和hasLowercase返回true,例如:“ @”。toUpperCase()===“ @”。 您可以將“特殊字符”移出並更改功能

var specialCharacters = ["/", "*", "-", "+", "_", "@", "%", "&", "<", ">", "!", "(", ")", "$", "^", "\\", "#", ".", ",", ";", ":"];

function hasUppercase(input) {
    for (var i = 0; i < input.length; i++) {
        if (specialCharacters.indexOf(input[i]) == -1 && input[i] === input[i].toUpperCase()) {
            return true;
        }
    }
}

function hasLowercase(input) {
    for (var i = 0; i < input.length; i++) {
        if (specialCharacters.indexOf(input[i]) == -1 && input[i] === input[i].toLowerCase()) {
            return true;
        }
    }
}

正如@SergioEscudero在上面提到的那樣,使用正則表達式使這項任務變得更加容易。 這是您的代碼的有效版本

function ValidatePassword(input){
    if(isLongEnough(input) && hasUppercase(input) && hasLowercase(input) && hasSpecialCharacters(input)){
        console.log('The password is valid.');
    }else if(!hasUppercase(input)){
        console.log('The password needs at least one capital letter.');
    }else if(!hasLowercase(input)){
        console.log('The password needs at least one lowercase letter.');
    }else if(!isLongEnough(input)){
        console.log('The password needs to be at least 8 characters long.');
    }else if(!hasSpecialCharacters(input)){
        console.log('The password needs at least one special character.');
    }
}

function hasUppercase(input){
    for(var i = 0; i < input.length; i++){
        if(input[i].match(/^[A-Z]*$/)){
            return true;
        }
    }
}

function hasLowercase(input){
    for (var i = 0; i < input.length; i++){
        if(input[i].match(/^[a-z]*$/)){
            return true;
        }
    }
}

function isLongEnough(input){
    if(input.length >= 8){
        return true;
    }
}

function hasSpecialCharacters(input){
for(var i = 0; i < input.length; i++){
    if(input`enter code here`[i].match(/[0-9-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/i)){
        return true;
     }

  }
}
ValidatePassword('sdgdgdgdgdgdD{')
ValidatePassword('sdgdgdgdgdgdD')
ValidatePassword('DDDDDDDDDDDDDDDD#{')
ValidatePassword('sdgdgdgdgdgd{')
//The password is valid.
//The password needs at least one special character.
//The password needs at least one lowercase letter.
///The password needs at least one capital letter.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM