단일 정규식에 여러 lookahead assertions와 (.NET에서)이 작업을 수행 할 수있는 모든 조건에 해당하는 경우
^(?=.*\p{Lu})(?:.*\p{Ll})(?=.*\d)(?=.*\W)(?!.*(.).*\1.*\1)
이 일치합니다. 당신이 매치 조작, 당신에 대해 일치하고있는 문자열을 반환 정규식의 끝에서 .*
을 추가 할 경우 - 경기 문자열의 모든 문자를 소비하지 않을 것을
는
^ # Match the start of the string
(?=.*\p{Lu}) # True if there is at least one uppercase letter ahead
(?=.*\p{Ll}) # True if there is at least one lowercase letter ahead
(?=.*\d) # True if there is at least one digit ahead
(?=.*\W) # True if there is at least one non-alnum character ahead
(?!.*(.).*\1.*\1) # True if there is no character repeated twice ahead
참고.
JavaScript에서는 유니 코드 문자 속성을 사용할 수 없습니다. 그래서 대신 사용할 수 있습니다
^(?=.*[A-Z])(?:.*[a-z])(?=.*\d)(?=.*\W)(?!.*(.).*\1.*\1)
물론 유효성 검사에 ASCII 문자를 사용합니다. 괜찮으 시다면, 괜찮아요. 너는 [A-ZÄÖÜÀÈÌÒÙÁÉÍÓÚ]
등등과 같은 특성 종류를 갈고 갈 수 있었다 그러나 너는 아마 이것으로 완전하지 않을 텐데. 서버 측에서는 유효성 검사 결과가 동일하게 나타나도록하려면 RegexOptions.ECMAScript
을 지정해야 .NET 정규식 엔진이 JavaScript 엔진처럼 작동합니다 (Alan Moore에게 감사드립니다!).
Rubular에서 작동하도록이 패턴을 얻는 데 어려움을 겪고 있습니다. http://rubular.com/r/008s20R3fa –
@dorkitude : 1.9보다 앞선 루비 정규 표현식은'\ p {Lu }'와'\ p {LI}'. 다음과 같이 .NET 구동 테스터에서 시도해보십시오. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –
예, Ruby는 지원하지 않습니다. 유니 코드 문자 속성 ('\ p {Lu}'등), 루비가 사용하는 루비 1.8 이상은 생각합니다. 대신에 [[A-Z]'를 사용하고'\ p {Ll}'에'[a-z]'를 쓰면 제대로 동작 할 것입니다. –