用于密码的 javascript regex,包含至少8个字符、1个数字、1个大写和1个小写

我正在尝试编写一个正则表达式来验证一个必须满足以下条件的密码:

  • 至少包含8个字符
  • 至少包含一个数字
  • 包含至少1个小写字符(a-z)
  • 包含至少1个大写字符(A-Z)
  • 只包含0-9a-zA-Z

我尝试了以下方法,但似乎没有效果。

Http://jsfiddle.net/many_tentacles/hzuc9/

<input type='button' value='click' class='buttonClick' />
<input type='text' />
<div></div>

还有..。

$(".buttonClick").click(function () {


if ($("input[type=text]").filter(function () {
return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
})) {
$("div").text("pass");
} else {
$("div").text("fail");
}


});

有什么想法吗?

236594 次浏览

正则表达式只允许8个字符。使用 {8,}指定8个或更多字符,而不是 {8}

但是为什么要限制密码允许的字符范围呢?8个字符的字母数字密码可以在几分钟内被我的 电话强行破解。

至少8 = {8,}:

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)

使用单个正则表达式来测试不同的部分要比使用一个正则表达式来覆盖所有部分要容易得多。它还使添加或删除验证条件变得更加容易。

还要注意,使用 .filter()是不正确的; 它总是返回一个 jQuery 对象(在 JavaScript 中被认为是正确的)。就个人而言,我会使用一个 .each()循环来迭代所有的输入,并报告单个的通过/失败状态。下面是一些例子:

$(".buttonClick").click(function () {


$("input[type=text]").each(function () {
var validated =  true;
if(this.value.length < 8)
validated = false;
if(!/\d/.test(this.value))
validated = false;
if(!/[a-z]/.test(this.value))
validated = false;
if(!/[A-Z]/.test(this.value))
validated = false;
if(/[^0-9a-zA-Z]/.test(this.value))
validated = false;
$('div').text(validated ? "pass" : "fail");
// use DOM traversal to select the correct div for this input above
});
});

正在演示

你的正则表达式应该是这样的:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/

这里有一个解释:

/^
(?=.*\d)          // should contain at least one digit
(?=.*[a-z])       // should contain at least one lower case
(?=.*[A-Z])       // should contain at least one upper case
[a-zA-Z0-9]{8,}   // should contain at least 8 from the mentioned characters
$/