2011-04-29 2 views
3

지난 4 시간 동안 20 개 이상의 다른 질문을 읽었을 것입니다.오라클 APEX POSIX 구현 패스워드 검증을위한 REGEX

필자는 Oracle APEX 응용 프로그램에서 regex를 통해 암호의 유효성을 검사하려고합니다. 정규식의 POSIX 구현은 정규식의 대부분 버전보다 더 엄격한 엔진입니다. ???

  • 14 사이의 18 자입니다 :

    가 궁극적으로 내가하는 암호의 유효성을 검사해야합니다 (아직 구체적으로이를 확인할 수 없었다,하지만 내 테스트는 그것이 사실이라고 믿고 나를 이끌 것입니다) 긴

  • 적어도 1 소문자 문자가
  • 가지고 적어도 1 대문자 문자
  • 가지고 최소 1 자리
  • 다음 특수 문자 중 적어도 하나 가지고 # $^+ = *() @ % &

나는 가장 간단한 형태로도 Apex 구현에서 작동하지 않는 몇 가지 정규 표현식을 시도했습니다. 예를 들어

: 이론적

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$ 

만큼이 1 개이어야 자리 1 상부 케이스와 하부 케이스 1 개 문자를 갖는 임의의 입력 문자열을 수락한다.

Javascript RegExp: Regular Expression Tester을 단순히 "wS1"을 입력하여 사용하십시오. 문자열을 일치로 반환합니다.

일반 표현식 검사기와 동일한 RegExp를 사용하고 필드에 "wS1"을 입력하면 유효성 검사가 실패합니다.

내가 알고 있어야하는 정규 표현식의이 특정 구현에서 누락 된 것이 있습니까?

편집

나는 ultimatley에 의한 검증을 위해 에이펙스의 광범위한 옵션에 지금은 정규식을 포기했습니다.

"[expression1]의 항목에는 [expression2]에 나열된 문자 중 최소한 하나가 포함되어야합니다."와 같은 말을 할 수있는 기능이 내장되어 있습니다. 불행히도 여러 검증을 작성해야합니다 (현재 최대 6 개). 그것은 나를 여러 오류 메시지를 표시하고 사용자가 자신의 새 암호를 업데이트하면 오류 메시지가 사용자가 요구 사항을 충족으로 제거 할 수 있습니다 밝은면에

....

모두 모두

, 그것은 여전히 ​​느낌 나에게 해킹처럼, 그리고 난 여전히 regexp 뒤에 비밀을 아는 데 관심이 있어요.

답변

1

이 정규식은 당신을 위해 작동합니다 :

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{14,18}$ 

설명 :

^      #The Start of the string. 
(?=.*[a-z])   #Any chars and then a lowercase. 
(?=.*[A-Z])   #Any chars and then an uppercase. 
(?=.*\d)    #Any chars and then a digit. 
(?=.*[#$^+=!*()@%&]) #Any chars and then a char from the list. 
.{14,18}    #After matching each of the previous, match 14 to 18 of any char. 
$      #The end of the String. 

(?=)이 일치 할 수 있는지 확인합니다,하지만 아무것도 포착하지 않는 lookaround 그룹입니다. 즉 성공한 후에는 문자열의 이전 위치로 돌아갑니다.이 경우 시작 부분은 ^입니다.