2012-04-01 4 views
1

현재 최소 및 최대 수표를 확인하는 코드가 있습니다. 또한 대문자, 소문자, 특수 문자 및 숫자가 필요합니다. 이것에 무엇을 추가 할 것인지 또는 몇 가지 예를 찾을 수있는 곳이 있습니까? Google 검색 중이고이 포럼을보고 추가 비밀번호 요구 사항을 추가하려했지만 실패했습니다.비밀번호 확인 - 추가 요구 사항 추가

이것이 내가 원하는 것입니다. 길이

최소 8 자 길이 적어도 소문자에 더 이상 20 자 이하 하나의 대문자 적어도 하나에서 특수 문자 :! @ # $으로의 %^& *() ~` - = _ + [] {} | : "; '/ <> 적어도 하나의 숫자 [0-9] 계정의 로그인 이름이나 이메일 주소와 일치 할 수 없습니다 문자

나의 현재 암호 유효성 검사 코드

.?
public static final int MIN_PASSWORD_LENGTH = 8; 
public static final int MAX_PASSWORD_LENGTH = 20; 

public static boolean isAcceptablePassword(String password) 
{ 
    if(TextUtils.isEmpty(password)) 
     return false; 

    int len = password.length(); 

    if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH) 
     return false; 

    for(int i = 0; i < len; i++) 
    { 
     char c = password.charAt(i); 
     if (Character.isWhitespace(c)) 
      return false; 
    } 

    return true; 
} 
+3

그렇다면 요구 사항을 구현하는 것이 어떻습니까? –

+0

[비밀번호 강도 검사 라이브러리] (http://stackoverflow.com/questions/3200292/password-strength-checking-library) 중복 가능 –

+0

? 이미 언급했듯이 나는 성공하지 않고 노력했습니다. 어떻게 구현합니까? 저는 웹 프로그래머이고 자바 프로그래머는 아니지만 새로운 요구 사항을위한 코드를 편집하려고합니다. – rick

답변

4

분석 String 데이터를 분석하려면 오른쪽과 왼쪽의 공백을 지워야합니다. 이이 같은 Strimg#trim 기능에 의해 수행됩니다

password = password.trim(); 

이 문자열의 모든 문자를 analize하려면 char 배열로 변환 할 수 있습니다, 그래서 당신의 요구 사항을 충족하기 쉬울 것입니다 :

char[] arrPassword = password.toCharArray(); 

이제이 함수를 사용하여 char를 계산할 수 있습니다 : Character#isUpperCase, Character#isLowerCase, Character#isDigit.

마지막으로, 확인해야 할 특수 문자가 포함 된 String을 사용할 수 있으며 평가중인 실제 문자가 해당 String 내에 있는지 확인할 수 있습니다. 이것은 String#indexOfString#valueOf을 사용하여 달성 할 수 있습니다.이 유형은 char을 String 유형으로 변환합니다.

public static final String SPECIAL_CHARACTERS = "[email protected]#$%^&*()~`-=_+[]{}|:\";',./<>?"; 
public static final int MIN_PASSWORD_LENGTH = 8; 
public static final int MAX_PASSWORD_LENGTH = 20; 

public static boolean isAcceptablePassword(String password) { 
    if (TextUtils.isEmpty(password)) { 
     System.out.println("empty string."); 
     return false; 
    } 
    password = password.trim(); 
    int len = password.length(); 
    if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH) { 
     System.out.println("wrong size, it must have at least 8 characters and less than 20."); 
     return false; 
    } 
    char[] aC = password.toCharArray(); 
    for(char c : aC) { 
     if (Character.isUpperCase(c)) { 
      System.out.println(c + " is uppercase."); 
     } else 
     if (Character.isLowerCase(c)) { 
      System.out.println(c + " is lowercase."); 
     } else 
     if (Character.isDigit(c)) { 
      System.out.println(c + " is digit."); 
     } else 
     if (SPECIAL_CHARACTERS.indexOf(String.valueOf(c)) >= 0) { 
      System.out.println(c + " is valid symbol."); 
     } else { 
      System.out.println(c + " is an invalid character in the password."); 
      return false; 
     } 
    } 
    return true; 
} 

System.out.println(c + " is an invalid character in the password."); 문장 그냥 실제 성격을 분석의 결과를 확인하는 것입니다 : 여기

이 모든 설명하기위한 코드 샘플입니다.

+0

빈 상태에있는 것은 무엇입니까 ?? –

+0

@ArpitPatel 수정 됨 –

0

스티븐은 약간의 검색 만하면 쉽게 답을 찾을 수 있습니다. 그러나 Stephen 스레드가 언급하는 스레드는 thirdparty 라이브러리를 사용합니다.

자신을 구현하려면 for 루프를 시작하기 전에 false로 요구 사항에 4 개의 부울을 초기화합니다. 루핑하는 동안 하나가 사실 일 때까지 네 가지 요구 사항을 확인하십시오. 대응하는 boolean를 true로 설정합니다.

어떻게 4 개 요구 사항을 확인합니다 :

  • 이미 구현 된 길이 REQ를.
  • 문자 (yourChar) .isLowerCase()
  • 문자 (yourChar).isUpperCase()
  • 특수 문자 : 여기를 참조하십시오 Java String Special character replacement을 - 당신이 4 개 논리 값에 대한 루프 체크 한 후 유사한 접근 방식

을 선택하고 그에 따라 반응 할 수있다.

2

좋은 정규 표현식은 어떻습니까? 이것은 올바르게 작동하는 것 같습니다. 특수 문자 검사를 위해 탈출구에 미끄러 졌을 수도 있습니다.

Pattern[] checks = { 
     Pattern.compile("[[email protected]#\\$%^&*()~`\\-=_+\\[\\]{}|:\\\";',\\./<>?]"), 
     Pattern.compile("\\d+"), 
     Pattern.compile("[A-Z]+"), 
     Pattern.compile("[a-z]+"), 
     Pattern.compile("^.{8,20}$") }; 

for (String test : new String[] { "password", "Password1", 
     "Password1&", "toolongtoolongtoolong" }) { 
    boolean ok = true; 
    for (Pattern check : checks) { 
     ok = ok && check.matcher(test).find(); 
    } 
    System.out.println(test + " " + ok); 
}