2013-09-04 3 views
0

정규식을 사용하려고하는데 사용자가 지정한 비밀번호 만 허용하려고합니다. Java Regex 허용 할 사용자 특정 문자

내가이 있지만이 MIN_LENGTH와 MAX_LENGTH는 데이터베이스에서입니다

^[[email protected]\\#$%&*()_+\\]\\[';:?.,!^-]{"+MIN_LENGTH+","+MAX_LENGTH+"}$ 

작동하지 않는 시도의 작업 최소 및 최대 lenth의 경우, 내가 특정 대문자, 소문자, 숫자 및 특수 문자를 줄 수있는 방법에 대해 설명합니다.

감사 프라 딥는

+0

처음에는 일반적으로 이렇게할만한 이유가 없습니다. 암호는 저장 전에 해시되어야하며 해시 알고리즘은 입력에 어떤 문자가 있는지 신경 쓰지 않습니다. 실제 암호를 저장하는 것은 보안상의 악몽입니다. – chrylis

+4

그 문구를 더 잘 표현할 수 있습니다. –

+0

대문자, 소문자 로트, 숫자 및 특수 문자의 최소/최대 길이를 각각 지정 하시겠습니까? – sp00m

답변

0

나는 두려워 정규 표현식에 그 강력한 없습니다입니다. 아마도 하나의 정규식을 사용하는 솔루션을 찾을 수는 있지만 완전히 읽을 수없고 확장 할 수 없게됩니다. 각 제약 조건 논리를 하위 정규 표현식으로 분리하는 것이 좋습니다. 예를 들면 다음과 같습니다.

public static boolean isPasswordValid(String password) { 
    // 1 to 3 occurrences of lowercased chars 
    if (!password.matches("(?:[^a-z]*[a-z]){1,3}[^a-z]*")) { 
     return false; 
    } 
    // 2 to 4 occurrences of uppercased chars 
    if (!password.matches("(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*")) { 
     return false; 
    } 
    // 3 to 5 occurrences of digits 
    if (!password.matches("(?:[^0-9]*[0-9]){3,5}[^0-9]*")) { 
     return false; 
    } 
    // 4 to 6 occurrences of special chars (simplified to "_", "." or "-") 
    if (!password.matches("(?:[^_.-]*[_.-]){4,6}[^_.-]*")) { 
     return false; 
    } 
    // no other kind of chars, and password length from 3 to 20 
    if (!password.matches("[a-zA-Z0-9_.-]{3,20}")) { 
     return false; 
    } 
    return true; 
} 
+0

덕분에 나는 이것을 시도 할 것이다. – pradeep

관련 문제