包含至less8个字符,1个数字,1个大写和1个小写字母的javascript正则expression式
我想写一个正则expression式来validation密码,它必须符合下列条件:
- 至less包含8个字符
- 至less包含1个数字
- 包含至less1个小写字符(az)
- 包含至less1个大写字符(AZ)
- 仅包含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])(?=.*[az])(?=.*[AZ])([a-zA-Z0-9]{8})$/); })) { $("div").text("pass"); } else { $("div").text("fail"); } });
有任何想法吗?
我猜你的正则expression式应该是这样的:
(/^(?=.*\d)(?=.*[az])(?=.*[AZ])[0-9a-zA-Z]{8,}$/)
这里是一个解释:
(/^ (?=.*\d) //should contain at least one digit (?=.*[az]) //should contain at least one lower case (?=.*[AZ]) //should contain at least one upper case [a-zA-Z0-9]{8,} //should contain at least 8 from the mentioned characters $/)
使用单独的正则expression式来testing不同的部分比试图用单个正则expression式来覆盖所有部分要容易得多。 这也使得更容易添加或删除validation标准。
还要注意,你对.filter()
是不正确的。 它会一直返回一个jQuery对象(在JavaScript中被认为是真的)。 就个人而言,我会使用.each()
循环遍历所有input,并报告单个通过/失败状态。 如下所示:
$(".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(!/[az]/.test(this.value)) validated = false; if(!/[AZ]/.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 }); });
工作演示
你的正则expression式只允许8个字符。 使用{8,}
指定八个或更多而不是{8}
。
但是,为什么要限制你的密码允许的字符范围呢? 8个字符的字母数字密码可以在几分钟内被我的手机强制使用。
至less8 = {8,}
:
str.match(/^(?=.*[0-9])(?=.*[az])(?=.*[AZ])([a-zA-Z0-9]{8,})$/)