2017-05-09 4 views
-5

isUpperCase(), isLowerCase() 등 대신 정규식을 사용하라는 지시를 받았지만 정규식 사용법에 대한 단서가 없습니다.정규식을 사용하여 특정 문자열 유효성 검사

length min = 8 characters 
length max = 20 characters 
must contain at least one lower case character (a-z) 
must contain at least one upper case character (A-Z) 
must contain at least one number (0-9) 
must contain at least one special character 

감사 :

이 내가 확인해야합니다 것입니다.

+0

이 질문은 연구 노력을 표시하지 않습니다. – VGR

+1

그는 노력을 찾은 xxx – Antoniossss

+0

http://stackoverflow.com/questions/12018245/regular-expression-to-validate-username – quackenator

답변

0

대문자의 정규식은 이고 소문자의 경우 [a-z] 둘 다 주어진 문자 그룹의 적어도 하나의 발생에 대해 테스트합니다. 당신이 배우고 싶은 경우에

1

, 정규식을 사용하는 방법을, 나는 다음과 같은

  • 이 강의
  • 자바 책 ("패턴"에 대한, 특히 장과 "정규 표현식")를 읽고 노트를 읽어 보는 것이 좋습니다
  • Java 설명서를 읽으십시오. 약 Pattern
0

다음은 자바 스크립트의 예입니다. 자바는 유사합니다 : 이것은 다음, 다음, 다음, 하나의 소문자 일 개 수도 적어도 하나 개의 번호가있는 숫자 또는 문자 아닌 하나를 테스트

var password = '0Aa!.......' 
const regexp = /[0-9]?[a-z]?[A-Z]?[^0-9A-Za-z]?/; 
var isValid = (password.length >= 8 && password.length <= 20) && regexp.test(password); 

. 그것은 정확한 해결책이 아니라 개념을 보여줍니다.

나는 다른 사람들에게 당신이 더 많이 읽어야한다는 것에 동의한다. 정규식과 Java는 잘 설명되어 있습니다.

+0

"AAAAAAAA"와 일치하지 않습니까? 귀하의 본보기는 매우 구체적인 순서가 필요합니다. 나는 이것이 미리 말하기 없이는 가능하지 않다고 생각한다. – quackenator

+0

너는 올 바르고 정숙하다. 나는 정확한 해결책이 아닌 regexes가 어떻게 사용되는지 보여주기 위해 노력했다. 문제는 투표가 중단되었지만 필자는 더 많은 독서를 할 수있는 출발점을 제공하고자했습니다. 그것이 내가 (그가 찾고있는) 자바에서 대답을하지 않은 이유입니다. –

0

참고 : Java에서는 테스트하지 않았지만 pcre 엔진에서 작동합니다.

^(?=.{8,20}$)    //this matches 8 to 20 characters, inclusive (positive lookahead) 
    (?=[^A-Z]*?[A-Z])   //this matches if one uppercase letter is present (positive lookahead) 
    (?=[^a-z]*?[a-z])   //this matches if one lowercase letter is present (positive lookahead) 
    (?=[^0-9]*?[0-9])   //this matches if one digit is present (positive lookahead) 
    (?=[^[email protected]#$%^&*]*?[[email protected]#$%^&*]) //this matches if one special character is present (positive lookahead) 
    [[email protected]#$%^&*]+$  //this matches if the enclosed characters are present 

이 당신이 원하는에 대한 맨 위에 조금있을 수 있지만 난 여기가 테스트 한 :

^(?=.{8,20}$)(?=[^A-Z]*?[A-Z])(?=[^a-z]*?[a-z])(?=[^0-9]*?[0-9])(?=[^[email protected]#$%^&*]*?[[email protected]#$%^&*])[[email protected]#$%^&*]+$ 

세분화 또한 https://regex101.com/r/P0J4X8/1

, 게으른 평가자가 불필요 할 수있다 lookaheads에서

+0

고맙습니다. 나는 이것을 자바에서 테스트 할 것이다. 이 추가 검사를 통해 정규식이 어떻게 될지 물어볼 수 있습니까 ("하나 이상의 동일한 연속 된 문자가 없어야합니다")? – JohnLocke

+0

다음 문자열을 시도했습니다 : ".getInfo (0) $ % @;" 그러나 그것은 작동하지 않았다. – JohnLocke

+0

나는 네거티브 lookaheads, 그룹 캡처 및 캡처 그룹 반복을 살펴볼 것입니다. – quackenator