密码的正则表达式(至少2位数和1个特殊字符,最小长度8)

时间:2013-10-21 10:11:15

标签: regex

我一直在搜索正则表达式,它接受至少两个数字和一个特殊字符,最小密码长度为8.到目前为止,我已完成以下操作:[0-9a-zA-Z!@#$%0-9]*[!@#$%0-9]+[0-9a-zA-Z!@#$%0-9]*

6 个答案:

答案 0 :(得分:30)

这样的事情应该可以解决问题。

^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z!@#$%]{8,}

(?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits

(?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha

(?=.*[!@#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined

[0-9a-zA-Z!@#$%] - dictates the allowed characters

{8,} - says the password must be at least 8 characters long

可能需要稍微调整,例如确切地指定你需要哪些特殊字符,但它应该可以解决问题。

答案 1 :(得分:8)

没有理由在单个正则表达式中实现所有规则。 考虑这样做:

Pattern[] pwdrules = new Pattern[] {
    Pattern.compile("........"),   // at least 8 chars
    Pattern.compile("\d.*\d"),     // 2 digits
    Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char
  }

String password = ......;
boolean passed = true;

for (Pattern p : pwdrules) {
    Matcher m = p.matcher(password);
    if (m.find()) continue;
    System.err.println("Rule " + p + " violated.");
    passed = false;
}

if (passed) { .. ok case.. }
else { .. not ok case ... }

这样做的另一个好处是可以毫不费力地添加,删除或更改密码规则。它们甚至可以驻留在一些资源文件中。

此外,它更具可读性。

答案 2 :(得分:3)

试试这个正则表达式。它使用前瞻来验证您至少有两位数和一个特殊字符。

^(?=.*?[0-9].*?[0-9])(?=.*[!@#$%])[0-9a-zA-Z!@#$%0-9]{8,}$ 

<强>说明

^ #Match start of line.

(?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not.

(?=.*[!@#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not.

[0-9a-zA-Z!@#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful.

$ # Match end of line. 

答案 3 :(得分:3)

试试这个:

^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$

以下是它的工作原理:

  • (?=.*\d{2,})此部分说除了至少2位数
  • (?=.*[$-/:-?{-~!"^_ []] {1,})`这些是特殊字符,至少为1
  • (?=.*\w),其余是任何字母(等于[A-Za-z0-9_]
  • .{8,}$这个说至少包含8个字符,包括之前的所有规则。 下面是当前正则表达式的地图(在Regexper的帮助下制作) Regexp map UPD

正则表达式应如下所示^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ 查看评论以获取更多详细信息。

答案 4 :(得分:0)

试试这个:^.*(?=.{8,15})(?=.*\d)(?=.*\d)[a-zA-Z0-9!@#$%]+$

请阅读以下链接以制作密码正则表达式政策: -

Regex expression for password rules

答案 5 :(得分:0)

正则表达式定义您要匹配的字符串上的结构。除非您在正则表达式上定义空间结构(例如至少两位数后跟一个特殊字符,然后是...... ),否则您无法使用regex来验证字符串。