【问题标题】:jQuery / Javascript password validation using regex使用正则表达式的 jQuery / Javascript 密码验证
【发布时间】:2016-06-03 18:49:41
【问题描述】:

我正在尝试使用正则表达式或 javascript 实现密码验证。 不幸的是,我是 Regex 的新手:/

标准是:

  • 最小长度:8 个字符(可以是大写或小写)
  • 必须包含 1 个特殊字符(类似于 !?$%&@)
  • 必须至少包含一个数字

我找到了以下 sn-p,但它缺少对至少特殊+数字类型的字符的检查..

function validPassword(password) {
    var has_letters = (/[a-zA-Z]/).test(password);
    var has_numbers = (/[0-9]/).test(password);
    var has_length = 3 <= password.length && password.length <= 30;
    return has_letters && has_numbers && has_length;
}

谢谢

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

添加一张额外的支票:

function validPassword(password) {
    var has_letters = /[a-zA-Z]/.test(password);
    var has_numbers = /\d/.test(password);
    var has_special = /[!?$%&@]/.test(password);
    var has_length = (password.length >=8 && password.length <= 30);

    return has_letters && has_numbers && has_special && has_length;
}

但是,如果您希望单个正则表达式完成所有这些操作,请使用前瞻:

var re = /^(?=.*\d)(?=.*[!?$%&@])(?=.*?[a-zA-Z]).{8,30}$/;

var isValid = re.test(password);

【讨论】:

  • 我想它不会检查特殊字符和数字上的长度=1(?)
  • 我相信您至少想要一个特殊字符?还是您想要一个特殊字符?
  • @Fuxi 你没说'数字应该是一',你说的是must contain at least one number
  • @anubhava 是的,你是对的,对此感到抱歉.. 至少数字是正确的
【解决方案2】:

你的正则表达式应该是这样的:

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

详情如下:

(?=^.{6,}$) - String is > 5 chars
(?=.*[0-9]) - Contains a digit
(?=.*[A-Z]) - Contains an uppercase letter
(?=.*[a-z]) - Contains a lowercase letter
(?=.*[^A-Za-z0-9]) - A character not being alphanumeric.

【讨论】:

    【解决方案3】:

    另一种方法是

    function validPassword(password) {
    
        return password.length > 8 
           && password.match( /[\d]/ ) 
            && password.split( /[\W]/ ).length == 2 ;
    }
    

    password.length &gt; 8 检查长度应至少为 8

    password.match( /[\d]/ ) 检查它是否至少有一个数字

    password.split( /[\W]/ ).length == 2 检查是否有一个特殊字符

    【讨论】:

    • 任何让您水平滚动以查看所有内容的行都太长了;)
    • @NiettheDarkAbsol 希望现在不会太久:)
    【解决方案4】:

    您可以使用下面的正则表达式来验证您的密码:

    var regex = "^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";
    

    这将检查至少 8 个字符(至少 1 个字母、1 个数字和 1 个特殊字符)的验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 2013-06-10
      • 2021-10-17
      相关资源
      最近更新 更多