[英]JavaScript RegExp password validation not working
我嘗試使用 RegExp 驗證我的密碼。 我寫了以下代碼,
var pass = jQuery('#new_password').val();
// Minimum six characters, at least one uppercase letter, one lowercase letter and one number
var reg = new RegExp("^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{6,}$");
if (reg.test(pass)) {
alert(1);
} else {
alert(2);
}
但是,即使我按照我的要求輸入了復雜的密碼(至少六個字符,至少一個大寫字母,一個小寫字母和一個數字),條件的真實部分(如果條件)不會執行。
有人可以幫我解決這個問題嗎? 謝謝你。
將您的正則表達式更改為:
^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$
不要忘記一個g
標志。
當使用: (?=.*[A-Za-z])
,如果用戶僅鍵入大寫或小寫字母,它將通過。
使用(?=.*[@$!%*#?&])
時,要求用戶鍵入一些特殊字符。
var pass = 'TestString123'; // Minimum six characters, at least one uppercase letter, one lowercase letter and one number var reg = new RegExp(/^(?=.*[AZ])(?=.*[az])(?=.*\\d)[A-Za-z\\d@$!%*#?&]{6,}$/g); if (reg.test(pass)) { alert(1); } else { alert(2); }
試試這樣的東西嗎? 將每個測試分開,這樣更易於管理。 IMO。
export function validatePassword(password, repeatPassword) {
// password tests
const hasUpperCase = /[A-Z]/.test(password)
const hasLowerCase = /[a-z]/.test(password)
const hasNumbers = /\d/.test(password)
const hasSpecial = /\W/.test(password)
let errors = []
if (password !== repeatPassword) {
errors.push('Passwords do not match.')
}
if (password.length < 6) {
errors.push('Password must be at least 6 characters long.')
}
if (!hasUpperCase) {
errors.push('Password must contain at least one uppercase letter.')
}
if (!hasLowerCase) {
errors.push('Password must have at least one lowercase letter.')
}
if (!hasNumbers) {
errors.push('Password must have at least one number.')
}
if (!hasSpecial) {
errors.push('Password must have at least one special character.')
}
return errors
}
export default validatePassword;
我發現分隔每個測試而不是一個正則表達式會更容易。 您還可以為用戶提供特定的故障。
您可以嘗試以下方法:
^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[A-Za-z\d@$!%*#?&]{6,}$
如此處所示: https : //regex101.com/r/GAkedL/1
在這里,我們分別匹配每一個條件,因為在你的代碼中的第一先行意味着“ 后跟一個大寫或小寫字母”。
(?=.*?[az])
告訴正則表達式密碼應包含0個或更多字符,后跟一個小寫字母
(?=.*?[AZ])
告訴正則表達式密碼應包含0個或更多字符,后跟一個大寫字母
(?=.*?\\d)
告訴正則表達式密碼應包含0個或更多字符,后跟一個數字
注意添加了?
之后.*
每個先行。 這意味着在查找所需的字母或數字之前,正則表達式應匹配盡可能少的字符,這樣效率更高。
您需要對正則表達式進行一些修改。
要匹配至少6個字符(至少1個字母和1個數字),可以使用以下表達式:
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"
但是要確保至少一個字母也是大寫,您需要添加一個附加條件。 以下表達式至少應匹配6個字符,並至少包含1個大寫字母,1個小寫字母和1個數字:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
嘗試這個!
export function validatePassword(password) {
// password testing
const hasUpperCase = /[A-Z]/.test(password)
const hasLowerCase = /[a-z]/.test(password)
const hasNumbers = /\d/.test(password)
const hasSpecial = /\W/.test(password)
let errors = []
if (password.length < 6) {
errors.push('Password must be at least 6 characters long.')
}
if (!hasUpperCase) {
errors.push('Password must contain at least one uppercase letter.')
}
if (!hasLowerCase) {
errors.push('Password must have at least one lowercase letter.')
}
if (!hasNumbers) {
errors.push('Password must have at least one number.')
}
if (!hasSpecial) {
errors.push('Password must have at least one special character.')
}
return errors
}
export default validatePassword;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.