jQuery 使用特定规则验证密码的方法
jQuery method to validate a password with specific rules
我是 jquery 的新手,正在尝试使用非常基本复杂的验证密码。
密码必须至少为 7 个字符,至少有 1 个大写字母,至少有 1 个小写字母,至少有 1 个数字或特殊字符。
这个问题与我发现的 this answer 非常相似,但是我在添加 "digit OR special char" 部分时遇到了问题。
我认为这是一个我无法理解的正则表达式。我对该答案的修改如下所示:
$.validator.addMethod("pwcheck", function(value) {
return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
&& /[a-z]/.test(value) // has a lowercase letter
&& /[A-Z]/.test(value) //has an uppercase letter
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
// has a digit or special char
});
您需要关闭最后一个条件的括号。但实际上我注意到您的正则表达式存在一些问题。首先,您需要将所有特殊字符组合在一个括号中,这样它就不会连续匹配所有这些字符。
但除此之外,正则表达式过于冗长。这是一个更简单的解决方案。
$.validator.addMethod("pwcheck", function(value) {
return /[A-Z]+[a-z]+[\d\W]+/.test(value)
});
这将匹配 1 个或多个大写字符、1 个或多个小写字符和 1 个或多个 digit/special 字符。然而,这有一个缺陷。它只会按此特定顺序匹配。这意味着大写字母必须在小写字母之前,小写字母必须在数字之前。它会匹配
之类的东西
AFDSabcd1435
但不是
aA5fdHD14z
为了获得更准确的验证,它应该看起来更像这样
$.validator.addMethod("pwcheck", function(value) {
return /[A-Z]+/.test(value) && /[a-z]+/.test(value) &&
/[\d\W]+/.test(value) && /\S{7,}/.test(value);
});
这不像我之前的想法那么干净,但它会传递更多选项。
这是一个您可以使用 JavaScript 函数进行测试的示例。
function testValue(string) {
return /[A-Z]+/.test(string) && /[a-z]+/.test(string) &&
/[\d\W]/.test(string) && /\S{7,}/.test(string)
}
testValue("aGFbsdf4")
=> true
编辑: 以下答案适用于 original version of the OP.
假设你的正则表达式是正确的,你有一个语法错误。
这一行...
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
应该是...
&& /\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
或
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value))
我是 jquery 的新手,正在尝试使用非常基本复杂的验证密码。
密码必须至少为 7 个字符,至少有 1 个大写字母,至少有 1 个小写字母,至少有 1 个数字或特殊字符。
这个问题与我发现的 this answer 非常相似,但是我在添加 "digit OR special char" 部分时遇到了问题。
我认为这是一个我无法理解的正则表达式。我对该答案的修改如下所示:
$.validator.addMethod("pwcheck", function(value) {
return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
&& /[a-z]/.test(value) // has a lowercase letter
&& /[A-Z]/.test(value) //has an uppercase letter
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
// has a digit or special char
});
您需要关闭最后一个条件的括号。但实际上我注意到您的正则表达式存在一些问题。首先,您需要将所有特殊字符组合在一个括号中,这样它就不会连续匹配所有这些字符。
但除此之外,正则表达式过于冗长。这是一个更简单的解决方案。
$.validator.addMethod("pwcheck", function(value) {
return /[A-Z]+[a-z]+[\d\W]+/.test(value)
});
这将匹配 1 个或多个大写字符、1 个或多个小写字符和 1 个或多个 digit/special 字符。然而,这有一个缺陷。它只会按此特定顺序匹配。这意味着大写字母必须在小写字母之前,小写字母必须在数字之前。它会匹配
之类的东西AFDSabcd1435
但不是
aA5fdHD14z
为了获得更准确的验证,它应该看起来更像这样
$.validator.addMethod("pwcheck", function(value) {
return /[A-Z]+/.test(value) && /[a-z]+/.test(value) &&
/[\d\W]+/.test(value) && /\S{7,}/.test(value);
});
这不像我之前的想法那么干净,但它会传递更多选项。
这是一个您可以使用 JavaScript 函数进行测试的示例。
function testValue(string) {
return /[A-Z]+/.test(string) && /[a-z]+/.test(string) &&
/[\d\W]/.test(string) && /\S{7,}/.test(string)
}
testValue("aGFbsdf4")
=> true
编辑: 以下答案适用于 original version of the OP.
假设你的正则表达式是正确的,你有一个语法错误。
这一行...
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
应该是...
&& /\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value)
或
&& (/\d/.test(value) || /~!@#$%^&*_-+=[]\{}|;':",.<> /.test(value))