我需要一个带条件的正则表达式:
目前我有模式:(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
然而,它不允许使用特殊字符,是否有人有正确的正则表达式?
由于
答案 0 :(得分:60)
也许可以使用单个正则表达式,但这使得很难向用户反馈他们没有遵循的规则。像这样的更传统的方法会为您提供反馈,您可以在UI中使用这些反馈来告诉用户哪些pwd规则未得到满足:
function checkPwd(str) {
if (str.length < 6) {
return("too_short");
} else if (str.length > 50) {
return("too_long");
} else if (str.search(/\d/) == -1) {
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
return("bad_char");
}
return("ok");
}
答案 1 :(得分:15)
在jfriend00回答之后我写了这个小提琴来测试他的解决方案,并进行一些小改动,使其更具视觉效果:
这是代码:
checkPwd = function() {
var str = document.getElementById('pass').value;
if (str.length < 6) {
alert("too_short");
return("too_short");
} else if (str.length > 50) {
alert("too_long");
return("too_long");
} else if (str.search(/\d/) == -1) {
alert("no_num");
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
alert("no_letter");
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {
alert("bad_char");
return("bad_char");
}
alert("oukey!!");
return("ok");
}
不过,它的工作就像一个魅力! ;)
最好的问候和感谢jfriend00当然!
答案 2 :(得分:3)
符合这些(常见)密码要求的更优雅且独立的正则表达式是:
^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$
这里的优雅的触摸是你不必硬编码符号,例如$ @#等。要接受所有符号,你是简单地说:&#34;也接受所有不是字母数字的字符,而不是数字&#34;。
正则表达式{5,50}
的最后部分可以很容易地更改并且对应于最小和最大字符数:在此特定示例中,直到5个字符,正则表达式返回非匹配(即,需要最少6个字符来验证)。同样,在50个字符后,它也会返回不匹配。
答案 3 :(得分:1)
我有一个正则表达式,但它有点棘手。
^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$
让我解释一下,以及如何检查测试的密码是否正确:
正则表达式中有三个命名组。 1)“数字”:将匹配字符串中的单个数字。 2)“Alpha”:将匹配“a”到“z”或“A”到“Z”的单个字符 3)“特殊”:匹配单个字符不是“Alpha”或“Numbers”
这三个命名组被分组在一个替代组中,{6,50}
建议正则表达式机器捕获上面提到的那些组中的至少6个,但不超过50个。
要确保输入正确的密码,您必须检查是否存在匹配项,之后,如果匹配的组被捕获的数量与您想要的一样多。我是一个C#开发人员,不知道它是如何在javascript中工作的,但在C#中你必须检查:
match.Groups["Numbers"].Captures.Count > 1
希望它在javascript中的工作方式相同!祝你好运!
答案 4 :(得分:1)
检查7到16个字符之间的密码,其中只包含字符,数字,下划线和第一个字符必须是字母 -
/ ^ [A-ZA-Z] \ W {7,14} $ /
检查6到20个字符之间的密码,其中包含至少一个数字,一个大写和一个小写字母
/ ^(?= \ d)(?=。 [A-Z])(?=。* [A-Z])。{6,20} $ /
检查7到15个字符之间的密码,其中至少包含一个数字和一个特殊字符
/ ^(= [0-9]。)(= ?[@#$%^&安培; <!EM>])![A-ZA-Z0-9 @ #$%^&安培; ] {7,15} $ /
检查8到15个字符之间的密码,其中包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符
/ ^(?= \ d)(?=。 [AZ])(?= [AZ])(?=。 [^ A- ZA-Z0-9])(?!。* \ S)。{8,15} $ /
答案 5 :(得分:0)
我用这个
SensePlayerProximity
答案 6 :(得分:0)
DEMO https://jsfiddle.net/ssuryar/bjuhkt09/
按一下触发的功能。
HTML
<form>
<input type="text" name="testpwd" id="testpwd" class="form=control" onkeyup="checksPassword(this.value)"/>
<input type="submit" value="Submit" /><br />
<span class="error_message spassword_error" style="display: none;">Enter minimum 8 chars with atleast 1 number, lower, upper & special(@#$%&!-_&) char.</span>
</form>
脚本
function checksPassword(password){
var pattern = /^.*(?=.{8,20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%&!-_]).*$/;
if(!pattern.test(password)) {
$(".spassword_error").show();
}else
{
$(".spassword_error").hide();
}
}