密码模式的正则表达式

时间:2015-08-11 10:46:34

标签: javascript regex

我希望正常表达以下组合

  

密码必须至少包含8个字符。至少一个大写   字母,至少一个小写字母和至少一个数字   数字。它可能包含特殊字符,但不包含空格。

目前我正在使用正则表达式。

/^.*((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.*[!@#$%^&*()_+=])).*$/i

我希望密码可以按任何顺序排列。当前表达式允许我按顺序输入密码。

提前致谢

4 个答案:

答案 0 :(得分:2)

你真的可以简化这个以使用Javascript和一些简单,易于理解的正则表达式:

function validPassword(password) {
    return password.length >= 8 // Length
        && !~password.indexOf(" ") // No spaces
        && password.match(/[A-Z]/) != null // One uppercase
        && password.match(/[a-z]/) != null // One lowercase
        && password.match(/[0-9]/) != null; // One numerical digit
}

Example Test Cases

就个人而言,我可以比阅读/^.*((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.*[!@#$%^&*()_+=])).*$/i

更容易阅读

答案 1 :(得分:1)

删除前瞻之前存在的i修饰符和.*,并且还需要在字符类中添加A-Za-z\d,以便它也匹配字母和数字。

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[A-Za-z\d!@#$%^&*()_+=]{8,}$/

如果您使用i修饰符,则会使(?=.*[A-Z])部分变得毫无意义。

DEMO

答案 2 :(得分:0)

这是模式密码的示例。

async_read_some

遵循示例的描述:

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

这可能对你有帮助吗?

答案 3 :(得分:0)

以下是您可以使用的正则表达式:

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

请参阅demo

说明:

  • (?=.*\d) - 要求数字在字符串
  • (?=.*[a-z]) - 需要小写字母
  • (?=.*[A-Z]) - 需要大写字母
  • \S{8,} - 字符串应包含任何字符但空白,至少出现8次。

注意锚点^$,它们是不可或缺的。并且没有i修饰符,或者大写/小写区分不起作用。

作为替代方案,为了优化正则表达式,我们可以使用counterclasses

/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])\S{8,}$/