[英]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.