需要一些密码检查程序的帮助

时间:2015-11-12 23:53:36

标签: java

这是我到目前为止所拥有的

   public static void main(String[] args) {
    // TODO code application logic here
  String password;
  Scanner kb = new Scanner(System.in);
  System.out.print("Please enter your password: ");
  password = kb.nextLine();
    if (passwordOK(password)) 
    {  
        System.out.println("Valid Password");  
    } 
    else 
    {  
        System.out.println("Invalid Password");  
    }  
}  
   public static boolean passwordOK(String password) {  
  if (password == null) return false;
if (password.length() <= 8) return false;
boolean containsUpperCase = false;
boolean containsLowerCase = false;
boolean containsDigit = false;
for(char ch: password.toCharArray()){
    if(Character.isUpperCase(ch)) containsUpperCase = true;
    if(Character.isLowerCase(ch)) containsLowerCase = true;
    if(Character.isDigit(ch)) containsDigit = true;
}
return containsUpperCase && containsLowerCase && containsDigit;
}
}

我需要它

•密码长度必须至少为8个字符。

•密码必须至少包含:

  • 一个字母字符[a-zA-Z];

  • 一个数字字符[0-9];

  • 一个不是字母或数字的字符,例如

    ! @ $%^&amp; *() - _ = + []; :'“,&lt;。&gt; /?

•密码不得:

  • 包含空格;

  • 以感叹号[!]或问号[?]开始;

•密码不能包含3个或更多相同字符的重复字符串,例如“1111”或“aaa”。

我现在有点卡住了,所以想知道是否有人可以伸出援助之手并且可能会按照我的方式抛出一些示例代码

编辑:ashutosh,如何在不收到错误的情况下将此代码添加到您的程序

  String password2;   
  System.out.print("\nPlease type your password again to confirm: ");
  password2 = kb.nextLine();

  while( !password2.equals(password) )
  {
     System.out.print("Those passwords do not match. Try again: ");
     password2 = kb.nextLine();
  }

2 个答案:

答案 0 :(得分:1)

根据前两点尝试这样的事情:

boolean match = password.matches("(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!@#$%&*()_+=|<>?{}\\[\\]~-]).{8}");

将特殊字符更改为您的(所有这些都在括号[...]中)。记得在其中一些之前使用\。

对于空白:

boolean isWhitespace = password.matches("^\\s*$");

检查感叹号和问号:

boolean startsWithBadChar = password.matches("(!|?).*");

答案 1 :(得分:1)

建立您提供的代码,这是您可以用最粗糙的方式做的事情:

import java.util.*;
import java.lang.*;
import java.io.*;

class Test
{
    public static void main(String[] args) {
        // TODO code application logic here
        String password;
        Scanner kb = new Scanner(System.in);
        System.out.print("Please enter your password: ");
        password = kb.nextLine();
        if (passwordOK(password))
        {
            System.out.println("Valid Password");
        }
        else
        {
            System.out.println("Invalid Password");
        }
    }
    public static boolean passwordOK(String password) {
        if (password == null) return false;
        if (password.length() <= 8) return false;
        boolean containsUpperCase = false;
        boolean containsLowerCase = false;
        boolean containsDigit = false;
        boolean containsSpace = false;
        boolean containsSpecialChar = false;
        boolean containExclamationOrQuestionMark = false;
        if (password.charAt(0) == '!' || password.charAt(0) == '?') containExclamationOrQuestionMark = true;
        int i = 0;
        boolean containsRepeatingChars = false;
        String specialChars = "!@$%^&*()-_=+[];:'\",<.>/?";
        for(char ch: password.toCharArray()){
            if (i>=2)  {
                if ((password.charAt(i) == password.charAt(i-1)) && (password.charAt(i-1) == password.charAt(i-2)))
                    containsRepeatingChars = true;
            }
            if(Character.isUpperCase(ch)) containsUpperCase = true;
            if(Character.isLowerCase(ch)) containsLowerCase = true;
            if(Character.isDigit(ch)) containsDigit = true;
            if(ch == ' ') containsSpace = true;
            if(!containsSpecialChar && specialChars.indexOf(ch) >= 0) containsSpecialChar = true;
            i += 1;
        }
        return containsUpperCase && containsLowerCase && containsDigit && !containsSpace && !containExclamationOrQuestionMark && !containsRepeatingChars && containsSpecialChar;
    }
}

虽然使用一堆正则表达式会更清晰。