2011-04-29 5 views
5

비밀번호 요구 사항에 대한 하나의 정규식을 찾고 있습니다. 암호 :비밀번호 강도 확인을위한 RegEx 질문

  • 공백을 포함 할 수 없음 8 자 이상이어야합니다
  • 는 비 포함, 대문자와 소문자를 모두 포함 적어도 하나의
  • 적어도 하나 개의 특수 문자를 포함
  • 숫자 자리 (즉, 어떤 문자가 아닙니다 0-9,a-z,A-Z)
+4

이것은 정규식을 끔찍한 방식으로 사용합니다. 수동으로하는 것은 너무 간단합니다. 나는 이것을 위해 정규 표현식을 사용하지 말 것을 권고한다. –

+0

나는 조합 폭발을 봅니다 ... –

+1

그것의 rewuirement는 그것을 하나의 표현으로 복잡하게 만들고 그것을 유지해야하는 인간을 위해 읽기가 매우 어렵습니다. 더 많은 유지 보수가 가능하도록 다른 테스트로 나누는 것이 좋습니다. 또한 당신이 할 수있는 것과는 다른 점 때문에 사용중인 regexp 엔진에 대해 언급하는 것을 잊어 버렸습니다. 테스트가 수행되는 위치에 따라 사용자에게 비밀번호가 실패한 이유에 대한 피드백을 제공하는 것이 중요 할 수 있습니다. – some

답변

4

아이디어와 대부분의 작업은 내가 공백 문자를 배제하기 위해 자신의 게시물의 하단에있는 기본 응답을 사용하지만, \S 모든 점들을 대체 http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$ 

에서 가져온, 그리고 약간의 주위에 이동 단언들.

+0

거의 +1. 참조 된 기사는 좋은 글이지만 표현의 시작 부분에'. * '점 스타가 있다고 잘못 암시합니다 (끝에있는 점 스타가 문자열과 일치하기 때문에 필요하지 않습니다). 이 특정 문제 (귀하의 대답은 정확하고 잘 작동합니다)에 아무런 해를 끼치 지 않지만 암호 길이 상한이 있으면 실패합니다. 길이 요구 사항이 8-12 문자이면 정확한 표현식은 다음과 같습니다.^(? =. {8,12} $) (? =. * [az]) (? =. * [AZ]) ((? =. * \ d) (? =. * \ W) \ S * $'(미리보기에서'\ S '가 필요 없다는 것에주의하십시오. – ridgerunner

8

아마도 논리를 코딩하는 것이 더 쉬울 것입니다. 정규 표현식은 패턴 매칭에 사용됩니다. 암호는 다소 임의의 문자열 인 경향이 있으므로 문제는 정규식에 의해 쉽게 해결되지 않습니다. 그것은 가능하지만 읽기 어렵고 유지하기가 어렵습니다.