我需要执行以下密码策略:
至少有9个字符,每个字符类至少有一个字符(字母小写和大写;数字,符号)。
有专家能帮上忙吗?(我正在使用Java regex引擎)
当我们正在做的时候,有什么在线工具可以为这类任务生成正则表达式吗?
谢谢!
发布于 2012-03-29 08:51:58
(?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*请注意,此模式不包括像ö这样的特殊utf字符。我不会一蹴而就的。如果你想验证的话,我会把它分开,然后搜索每一件东西。
发布于 2012-03-29 08:59:51
下面是我如何做到这一点(使用积极的展望):
(?=.{9,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\p{Punct}).*完整的示例和测试:
// Regexp Description
Pattern p = Pattern.compile("(?=.{9,})" + // "" followed by 9+ symbols
"(?=.*[a-z])" + // --- ' ' --- at least 1 lower
"(?=.*[A-Z])" + // --- ' ' --- at least 1 upper
"(?=.*[0-9])" + // --- ' ' --- at least 1 digit
"(?=.*\\p{Punct})"+ // --- ' ' --- at least 1 symbol
".*"); // the actual characters
String[] tests = {
"aB99", // too short
"abcdefghijk", // missing A
"abcdefGHIJK", // missing 5
"12345678910", // missing a
"abcDEF12345", // missing punct
"abcDEF-2345" // works!
};
for (String s : tests) {
boolean matches = p.matcher(s).matches();
System.out.printf("%-12s: %b%n", s, matches);
}输出:
aB99 : false
abcdefghijk : false
abcdefGHIJK : false
12345678910 : false
abcDEF12345 : false
abcDEF-2345 : true最后的评论:这种方法的问题是它对用户不太友好。如果您要给用户一个合理的响应,比如“密码缺少一个数字符号”,那么您需要再次做这个工作(找出哪一项要求失败)。
发布于 2012-03-29 08:54:14
我会使用多个regexp来解决这个问题:
9 chars -您可以重新执行,但是.length() >= 9要好得多!
对于字符类,您应该使用一个pr类:
[a-z]+
[A-Z]+
[0-9]+
[£$%&{[...]+ //all the possible symbols you want to accept
or perhaps:
[:punct:]+ // this depends on your programming language..
or like in the suggestion by @david-halter:
[^\w\s]+ // not alphanumeric or spaceshttps://stackoverflow.com/questions/9921933
复制相似问题