【问题标题】:Regex for Password validation in JavascriptJavascript中密码验证的正则表达式
【发布时间】:2013-06-10 18:37:12
【问题描述】:

正则表达式密码复杂性要求在创建或更改密码时必须应用以下四个特征中的any three

  • 字母字符 - 至少 1 个大写字母字符
  • 字母字符 - 至少 1 个小写字母字符
  • 数字字符 - 至少 1 个数字字符
  • 特殊字符 - 至少 1 个特殊字符

我正在尝试使用以下代码,但它不适用于special characters

(?=^.{6,}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

我希望针对以下 4 种情况验证我的正则表达式

匹配案例

  • P@ssword
  • 密码1
  • p@ssword1
  • p@12345

【问题讨论】:

标签: javascript jquery regex passwords


【解决方案1】:

我认为在这种情况下,单个正则表达式会很混乱。您可以轻松地做类似的事情

var count = 0;

count += /[a-z]/.test(password) ? 1 : 0;
count += /[A-Z]/.test(password) ? 1 : 0;
count += /\d/.test(password) ? 1 : 0;
count += /[@]/.test(password) ? 1 : 0;

if(count > 2) {
    alert('valid')
}

【讨论】:

  • 我可以在正则表达式的帮助下做到这一点,这就是要求。 :( 我已经使用上述方式实现了它,但需要它在普通的正则表达式中。
  • 这是正则表达式,但有多个。
  • @sivanv 你也必须知道,解决方案并不总是锤子,即使一开始的问题看起来像钉子
  • 这里的单个正则表达式太乱了,以后维护起来很麻烦
  • 我想你可以简化一点:count += +/[a-z]/.test(password) 和其他人一样吧?或者简单地说:[/[a-z]/,/[A-Z]/,/\d/,/\W/].filter(function(t){ return t.test(pass); }).length > 2
【解决方案2】:

我认为所有特殊字符也需要这个:[更新为拒绝空格]

    $(document).ready(function(){
    $('input').change(function(){
    var count = 0;
    var pass = $(this).val();
        count += /[a-z]/.test(pass) ? 1 : 0;
        count += /[A-Z]/.test(pass) ? 1 : 0;
        count += /\d/.test(pass) ? 1 : 0;
        count += /[^\w\d\s]/.test(pass) ? 1 : 0;
        (count>2 & !/[\s]+/.test(pass)) ? $(this).css('background-color','lime'):$(this).css('background-color','orange');
    });

});

还有小提琴:jsFiddle

【讨论】:

    【解决方案3】:

    我认为您可以使用的正则表达式是:

    (?=^.{6,}$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^A-Za-z0-9]).*
    

    我不知道为什么你的正则表达式中有这么多或运算符,但这个匹配如果:

    • (?=^.{6,}$) - 字符串大于 5 个字符
    • (?=.*[0-9]) - 包含一个数字
    • (?=.*[A-Z]) - 包含一个大写字母
    • (?=.*[a-z]) - 包含一个小写字母
    • (?=.*[^A-Za-z0-9]) - 不是字母数字的字符。

    【讨论】:

    • 但是我需要三个选项中的任何一个,而不是全部 4 个。
    • @sivanv 哦,但是你的正则表达式不工作吗?见this。您可以一次更改一个密码以检查其他密码。
    【解决方案4】:

    使用这个正则表达式:

    (?=^.{6,10}$)(?=.\d)(?=.[az] )(?=.[AZ])(?=.[!@#$%^&*()_+}{":;'?/>.\s).$**

    【讨论】:

    • 连小提琴都不能工作,你能再检查一次吗?即使 / 也没有转义,这怎么工作?
    【解决方案5】:
    var pattern = new RegExp(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).{6,}$/);
    
        if(pattern.test(value)){
             return true;
        } else {
             return false;
        }
    

    特殊字符也能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2011-05-06
      • 2016-10-19
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多