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