首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码策略的Regex

密码策略的Regex
EN

Stack Overflow用户
提问于 2012-03-29 08:44:21
回答 3查看 17.1K关注 0票数 9

我需要执行以下密码策略:

至少有9个字符,每个字符类至少有一个字符(字母小写和大写;数字,符号)。

有专家能帮上忙吗?(我正在使用Java regex引擎)

当我们正在做的时候,有什么在线工具可以为这类任务生成正则表达式吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-29 08:51:58

代码语言:javascript
复制
(?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*

请注意,此模式不包括像ö这样的特殊utf字符。我不会一蹴而就的。如果你想验证的话,我会把它分开,然后搜索每一件东西。

票数 11
EN

Stack Overflow用户

发布于 2012-03-29 08:59:51

下面是我如何做到这一点(使用积极的展望):

代码语言:javascript
复制
(?=.{9,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\p{Punct}).*

完整的示例和测试:

代码语言:javascript
复制
                       //    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);
}

输出:

代码语言:javascript
复制
aB99        : false
abcdefghijk : false
abcdefGHIJK : false
12345678910 : false
abcDEF12345 : false
abcDEF-2345 : true

最后的评论:这种方法的问题是它对用户不太友好。如果您要给用户一个合理的响应,比如“密码缺少一个数字符号”,那么您需要再次做这个工作(找出哪一项要求失败)。

票数 6
EN

Stack Overflow用户

发布于 2012-03-29 08:54:14

我会使用多个regexp来解决这个问题:

9 chars -您可以重新执行,但是.length() >= 9要好得多!

对于字符类,您应该使用一个pr类:

代码语言:javascript
复制
[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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9921933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档