javascript regex for password containing at least 8 characters, 1 number, 1 upper and 1 lowercase
本问题已经有最佳答案,请猛点这里访问。
我正在尝试编写一个正则表达式来验证密码,该密码必须满足以下条件:
- 至少包含8个字符
- 至少包含1个数字
- 至少包含1个小写字符(a-z)
- 至少包含1个大写字符(A-Z)
- 仅包含0-9a-za-z
我试过以下方法,但似乎不管用。
http://jsfiddle.net/many_触角/hzuc9/
1 2 | <input type='button' value='click' class='buttonClick' /> <input type='text' /> |
还有…
1 2 3 4 5 6 7 8 9 10 11 | $(".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"); } }); |
有什么想法吗?
正则表达式应该如下所示:
1 | /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/ |
下面是一个解释:
1 2 3 4 5 6 | /^ (?=.*\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 $/ |
使用单个正则表达式来测试不同的部分要比使用单个正则表达式来覆盖所有部分容易得多。它还使添加或删除验证标准变得更容易。
还要注意,您对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $(".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 }); }); |
工作演示
至少8=
1 | str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/) |
您的regex只允许8个字符。使用
但是为什么要限制密码的允许字符范围呢?8个字符的字母数字密码可以在几分钟内被我的手机篡改。