首页 文章

密码REGEX,最少6个字符,至少一个字母和一个数字,可能包含特殊字符

提问于
浏览
21

我需要一个带条件的正则表达式:

  • 最少6个字符,最多50个字符

  • 必须包含1个字母

  • 必须包含1个数字

  • 可能包含特殊字符,如!@#$%^&*()_

目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$

但是它不允许特殊字符,有没有人有一个很好的正则表达式呢?

谢谢

5 回答

  • 2

    关注jfriend00回答我写了这个小提琴来测试他的解决方案,并进行一些小改动,使其更具视觉效果:

    http://jsfiddle.net/9RB49/1/

    这是代码:

    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当然!

  • 0

    更符合这些(常见)密码要求的更优雅且独立的正则表达式是:

    ^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$
    

    这里的优雅触感是你_116116_如$ @#等 . 要接受所有符号,你只需说:"accept also all the not alphanumeric characters and not numbers" . 正则表达式 {5,50} 的最后部分可以很容易地改变并且对应于最小和最大字符数:在该特定示例中,直到5个字符,正则表达式返回非匹配(即,需要最少6个字符来验证) . 类似地,在50个字符之后它也返回非匹配 .

  • 14

    我有一个正则表达式,但它有点棘手 .

    ^(?:(?<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)“Special”:匹配单个字符不是“Alpha”或“Numbers”

    这三个命名组被分组在一个替代组中,并且 {6,50} 建议正则表达式机器捕获上面提到的那些组中的至少6个,但不超过50个 .

    要确保输入正确的密码,您必须检查是否存在匹配项,之后,如果匹配的组被捕获的数量与您想要的一样多 . 我是一名C#开发人员,不知道它是如何在javascript中运行的,但在C#中你必须检查:

    match.Groups["Numbers"].Captures.Count > 1
    

    希望它在javascript中的工作方式相同!祝好运!

  • 56

    也许可以使用单个正则表达式,但这使得很难向用户反馈他们没有遵循的规则 . 像这样的更传统的方法为您提供反馈,您可以在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
    • 检查7至16个字符之间的密码,其中只包含字符,数字,下划线和第一个字符必须是字母 -

    / ^ [A-Za-z] \ w {7,14} $ /

    • 检查6到20个字符之间的密码,其中包含至少一个数字,一个大写和一个小写字母

    /^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{6,20}$/

    • 检查7到15个字符之间的密码,其中至少包含一个数字和一个特殊字符

    /^(?=.[0-9])(?=.[!@#$%^&])[a-zA-Z0-9!@#$%^&]{7,15}$/

    • 检查8到15个字符之间的密码,其中包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符

    /^(?= . \ d)(?= . [az])(?= . [AZ])(?= . [^a- zA-Z0-9])(?! . * . ) . {8,15} $ /

    我希望这会对某人有所帮助 . 有关更多信息,请查看此article和本网站regexr.com

相关问题