【问题标题】:Java - password policy validationJava - 密码策略验证
【发布时间】:2012-07-24 17:26:47
【问题描述】:

在我的网络应用程序中,我有以下要求。我在用户第一次注册时设置密码时有以下限制。

  1. 密码应包含 6 位数字。 (例如 132715)
  2. 只能输入数字
  3. 不允许升序/降序数字(例如 123456、654321 - 不允许)
  4. 3 个(或更多)相同的数字不能重复(例如 121715、232254 - 不允许)。

任何人都可以澄清这是否可以通过正则表达式来完成,或者通过Java实现更好。如果可能的话,谁能给我一个示例代码?

【问题讨论】:

  • 这可以通过正则表达式来完成。但是,您不能只是跳上并期待答案。请向我们展示您在该主题上尝试或研究过的一些事情。
  • 我认为只有1和2可以用正则表达式完成。
  • 1 和 2 很简单,长度匹配和 ^[\d]+$ 上的匹配,3 只是 2 种情况,4 需要一些代码,但不会特别困难。
  • 条件 1 和 2 可以通过\\d{6} 正则表达式进行检查,但其余的应该通过某种算法来完成。
  • 添加一些你已经完成的工作,这样它看起来不像是我的家庭作业问题

标签: java regex validation web


【解决方案1】:

你的问题似乎很有趣,所以我想我会试一试。这应该做你正在寻找它做的事情,尽管我没有彻底测试它。那里可能有更简单的解决方案。

private static boolean validatePW(String pw) {
    if(pw.length() == 6){
        int pwInt = Integer.MIN_VALUE;
        try{
            pwInt = Integer.parseInt(pw);
            char[] values = pw.toCharArray();
            boolean asc = true;
            boolean dec = true;
            int[] map = new int[10];
            map[values[0]-48] = 1;
            for(int i = 1; i < values.length; i++){
                asc = asc && values[i] - 1 == values[i-1];
                dec = dec && values[i] + 1 == values[i-1];
                map[values[i]-48] ++;
                if(map[values[i]-48] == 3){return false;}
            }
            if(asc || dec){
                return false;
            } else {
                return true;
            }
        } catch(NumberFormatException e){
            return false;
        }
    }
    return false;
}

【讨论】:

    【解决方案2】:

    有这么多限制,我认为您应该使用 Java 来验证这一点。
    您可以使用来自 Apache Commons 的 StringUtils 来帮助您。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2011-01-17
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多