正则表达式对密码策略
我需要执行以下的口令策略:正则表达式对密码策略
至少9个字符,其中至少一个字符从各4 字符类(字母下和上壳体的;数字,符号)。
任何正则表达式的专家可以在这里帮忙吗? (我正在使用Java正则表达式引擎)
虽然我们在这里,有没有任何在线工具可以为这些类型的任务生成正则表达式?
谢谢!
(?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*
注意,这种模式不包括像ö
特殊字符UTF。我不会在一个正则表达式中这样做。如果你想验证它,我会分解它并搜索每个东西。
为了避免误解,这些工具不是用于*生成*表达式,而是用于*测试*它们。 – 2012-03-29 08:51:07
是的,但可以通过跟踪和错误生成表达式。它是测试/使用表达式并了解它们的好方法。但在技术上你是对的;) – pascalvgemert 2012-03-29 08:53:12
正则表达式必须开发,“生成”他们的踪迹和错误只是容易出错。 – stema 2012-03-29 08:56:15
我会用多个正则表达式对解决这个问题:
9个字符 - 你可以正则表达式这一点,但。长度()> = 9时好多了!
对于角色职业,你应该使用一个公关类:
[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 spaces
这是我会怎么做(使用正向前查找):
(?=.{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:46:32
正则表达式的一个很好的参考是在http://www.vogella.de/articles/JavaRegularExpressions/article.html。请张贴你已经尝试过的reg ex – 2012-03-29 08:47:05
http://stackoverflow.com/questions/3387785/password-validation-regular-expression – cmbuckley 2012-03-29 08:47:07