【问题标题】:Validate that password doesn't contain 3+ consecutive characters from name验证密码不包含名称中的 3+ 个连续字符
【发布时间】:2013-05-23 18:05:51
【问题描述】:

我需要在 Java 中进行密码验证后执行此操作

  • 长度必须至少为 8 个字符
  • 必须至少包含 1 个数字
  • 必须至少包含 1 个大写字母
  • 必须至少包含 1 个小写字母
  • 您的全名或用户名中不能包含 3 个或更多连续字符(例如,如果您的姓名是 Will,则您不能使用密码 Stiller458

我有前4分,我怎么做最后一分?

目前我有:

String pattern = "^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\\S{8,}$";
boolean passwordValidation = originalPassword.matches(pattern);

【问题讨论】:

  • 你必须用正则表达式来做这个吗?最后一点可能是不可能的。
  • 谁让你在正则表达式中这样做?你应该偷他一个甜甜圈!
  • 谢谢大家,我一直在与不使用 RegEx 的人争吵,他们坚持认为这是可能的,当我告诉他们给我 RegEx 时,他们刚刚离开。
  • 对于一个号码,[^a-zA-Z] 应该是 [0-9]。你可能想要. 而不是\\S

标签: java regex validation passwords


【解决方案1】:

对于您的 1,2,3,4 案例

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{8,}$

第 5 例

public boolean isValid(final String userName,final String password)
{
    for(int i=0;(i+2)<userName.length();i++)
          if(password.indexof(userName.substring(i,i+2))!=-1)
                return false;
    return true;
}

【讨论】:

  • 我收到“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:8”,知道为什么吗?
  • @Vivek 哎呀..现在检查编辑..而不是使用userName.length() 我使用了password.length()..小错误
  • Tnx,我也将 if(password.indexof(userName.substring(i,i+2))!=-1) 更改为 if(password.indexOf(userName.substring(i,i+ 3))!=-1) 以迎合包含 3 个或更多
  • @Vivek 检查 3 与检查 4,5,6,7,.. 一样好,所以您只需要检查 3 个字符..
【解决方案2】:

最后一点不是你用正则表达式做的事情。遍历名称并检查密码。

正则表达式擅长模式,而不是解析。一种或另一种方式,您必须使用循环来遍历名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2017-12-07
    • 2012-08-03
    • 2022-07-22
    • 2022-01-17
    • 2011-11-30
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多