我一直在搜索正则表达式,它接受至少两个数字和一个特殊字符,最小密码长度为8.到目前为止,我已完成以下操作:[0-9a-zA-Z!@#$%0-9]*[!@#$%0-9]+[0-9a-zA-Z!@#$%0-9]*
答案 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的帮助下制作)
的 UPD 强> 正则表达式应如下所示^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$
查看评论以获取更多详细信息。
答案 4 :(得分:0)
试试这个:^.*(?=.{8,15})(?=.*\d)(?=.*\d)[a-zA-Z0-9!@#$%]+$
请阅读以下链接以制作密码正则表达式政策: -
答案 5 :(得分:0)
正则表达式定义您要匹配的字符串上的结构。除非您在正则表达式上定义空间结构(例如至少两位数后跟一个特殊字符,然后是...... ),否则您无法使用regex
来验证字符串。