包含至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,})$/)