Java中的正则表达式用于密码验证

119
我正在为Java应用程序创建一个用作配置参数的密码验证正则表达式。
正则表达式是:
^.*(?=.{8,})(?=..*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

密码策略如下:

  • 至少8个字符

  • 包含至少一个数字

  • 包含至少一个小写字母和一个大写字母

  • 包含至少一个特殊字符 (@#%$^ 等)

  • 不包含空格、制表符等

我缺失的是第5点。我无法让正则表达式检查空格、制表符、回车等等。

有人可以帮忙吗?


4
密码规则不好。请参考参考 - 密码验证获取更多信息。 - ctwheels
17个回答

1
也可以像这样做。
 public boolean isPasswordValid(String password) {


    String regExpn =
            "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$";

    CharSequence inputStr = password;

    Pattern pattern = Pattern.compile(regExpn,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);

    if(matcher.matches())
        return true;
    else
        return false;
}

0
String s=pwd;
int n=0;
for(int i=0;i<s.length();i++)
{
    if((Character.isDigit(s.charAt(i))))
    {
        n=5;
        break;
    }
    else
    {

    }
}
for(int i=0;i<s.length();i++)
{
    if((Character.isLetter(s.charAt(i))))
    {
        n+=5;
        break;
    }
    else
    {

    }

}

if(n==10)
{
    out.print("Password format correct <b>Accepted</b><br>");

}
else
{
    out.print("Password must be alphanumeric <b>Declined</b><br>");
}

说明:

  1. 首先将密码设置为字符串并创建整数集o。
  2. 然后通过for循环检查每个字符。
  3. 如果在字符串中找到数字,则添加5个。然后跳转到下一个for循环。Character.isDigit(s.charAt(i))
  4. 此循环检查字符串中放置的任何字母。如果找到,则再添加5个。 Character.isLetter(s.charAt(i))
  5. 现在通过if条件的方式检查整数n。 如果n = 10为真,则给定的字符串是字母数字,否则不是。

0
一个更一般的答案,可以接受所有特殊字符,包括_,会稍微有所不同:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\W|\_])(?=\S+$).{8,}$

(?=.*[\W|\_])中的差别是“至少包含所有特殊字符,包括下划线”。


0

简单易懂

("^ (?=.* [0-9]) (?=.* [a-z]) (?=.* [A-Z]) (?=.* [\\W_])[\\S]{8,10}$")

  1. (?= anything ) ->表示正向先行断言,确保所有输入字符串都符合此条件。例如(?=.*[0-9]) -> 表示确保所有字符串中至少有一个数字。如果没有则返回false

  2. (?! anything ) ->(反之亦然)表示负向先行断言,如果条件被写入则返回false

    近义词为^(condition)(condition)(condition)(condition)[\S]{8,10}$


虽然仅提供代码的答案可能解决问题,但一些解释将极大地提高答案的质量。 - Nigel Ren

0

我认为这也可以做到(作为更简单的模式):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[^\s]{8,}$

[正则表达式演示]


0

强密码示例代码块:

(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?=\\S+$).{6,18}
  1. 至少6个数字
  2. 最多18个数字
  3. 一个数字
  4. 一个小写字母
  5. 一个大写字母
  6. 可以包含所有特殊字符

0

正则表达式是 -

^(?:(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*)[^\s]{8,}$
  1. 至少8个数字 {8,}
  2. 至少一个数字 (?=.*\d)
  3. 至少一个小写字母 (?=.*[a-z])
  4. 至少一个大写字母 (?=.*[A-Z])
  5. 至少一个特殊字符 (?=.*[@#$%^&+=])
  6. 无空格 [^\s]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接