簡體   English   中英

如何檢查密碼中的特殊字符

[英]How to check for special characters in password

我試圖通過檢查大寫、小寫和特殊字符來驗證給定的密碼。 假設該程序為找到的每個需求存儲 true,為每個未找到的需求存儲 false。 如果沒有找到任何需求,則程序會打印一條錯誤消息以及每個需求的查找結果。 問題是即使密碼中有特殊字符,特殊字符變量也會一直返回為假。 似乎從未調用過要求檢查特殊字符的 function 特殊,但我不知道為什么。 有人可以幫忙嗎?

// Assume password input is "Patick_"
const passwordForSignup = document.getElementById("input-password");

const arrayOfSp = ["!", "@", "#", "$", "%", "&", "*", "_", "-", "?"];

const special = (c) => {
    console.log(c);
    for (let i = 0; i < arrayOfSp.length; i++)
    {
        if (c === arrayOfSp[i])
        {
            return true;
        }
    }
    return false;
}

if (passwordForSignup.value.length >= 6 && passwordForSignup.value.length <= 17)
{
    let upperCaseCheck = false;
    let lowerCaseCheck = false;
    let specialCharacterCheck = false;
    let passwordValue = "";
            
    for (let i = 0; i < passwordForSignup.value.length; i++)
    {
        passwordValue = passwordForSignup.value[i];

        if (passwordForSignup.value[i] === passwordValue.toUpperCase())
        {
            upperCaseCheck = true;
        }
        else if (passwordForSignup.value[i] === passwordValue.toLowerCase())
        {
            lowerCaseCheck = true;
        }
        else if (special(passwordValue))
        {
            specialCharacterCheck = true;
        }
    }

    if (!upperCaseCheck || !lowerCaseCheck || !specialCharacterCheck)
    {
        console.log("Something is wrong");
        console.log(upperCaseCheck);
        console.log(lowerCaseCheck);
        console.log(specialCharacterCheck);
    }
}

// else 
// {
//     message.push("Password must contain 6 - 17 characters");
//     errorFound(message, e);
// }

原因是您的特殊檢查是最后一次,並且

"_".toUpperCase()

例如返回"_"
嘗試:

        if (special(passwordValue))
        {
            specialCharacterCheck = true;
        }
        else if (passwordForSignup.value[i] === passwordValue.toUpperCase())
        {
            upperCaseCheck = true;
        }
        else if (passwordForSignup.value[i] === passwordValue.toLowerCase())
        {
            lowerCaseCheck = true;
        }
     

然而,這不是這樣做的方法。 而是使用正則表達式。

試試正則表達式模式,就像這個例子。

 const regex = /^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[-+_.@#$%^&*,? .]);+$/. function check_pass(){ var pass=document.getElementsByName("pass")[0];value. console.log(regex;test(pass)); }
 <input type='text' name='pass'><button id='test' onclick='check_pass()'>Check</button>

在哪里:

^表示字符串的開頭。

(?=.*[az])表示至少一個小寫字符。

(?=.*[AZ])表示至少一個大寫字符。

(?=.*\d)表示至少一個數值。

(?=.*[-+_.@#$%^&*,? ?])表示至少一個特殊字符。

如果您想要單獨的檢查,可以這樣進行:

 const lower = /^(?=.*[az])/; const upper = /^(?=.*[AZ])/; const nums = /^(?=.*\d)/; const special = /^(?=.*[-+_.@#$%^&*,? .]);+$/. function check_pass() { var pass = document.getElementsByName("pass")[0];value. console:log('Lower. ' + lower;test(pass)). console:log('Upper. ' + upper;test(pass)). console:log('Numbers. ' + nums;test(pass)). console:log('Specials. ' + special;test(pass)); }
 <input type='text' name='pass'><button id='test' onclick='check_pass()'>Check</button>

暫無
暫無

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

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