2012-07-24 138 views
-3

在我的Web应用程序中,我有以下要求。当用户首次注册时设置密码时,我有以下限制。Java - 密码策略验证

  1. 密码应包含6位数字。 (例如132715)
  2. 只有号码可以输入
  3. 没有升/降允许数目(例如123456,654321 - 不允许)例如121715,232254
  4. 3(或更多)相同数量的不能重复( - 不允许)。

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

+0

这可以用正则表达式来完成。然而,你不能只是跳上,期待一个答案。请向我们展示一些您已经尝试或关注过的主题。 – 2012-07-24 17:30:18

+0

我认为只有1和2可以用正则表达式完成。 – elias 2012-07-24 17:30:32

+0

1和2很容易,长度匹配和匹配^ [\ d] + $,3只是2例,4需要一些代码,但不会特别困难。 – lynks 2012-07-24 17:30:43

回答

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; 
} 
1

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