2013-04-19 4 views
3

내가로 지정된 것 암호 데이터 주석 정규 표현식을 제공해야합니다 : 그것은 나에게 두통을주고있다 특수 문자의 배제의정규 표현식

min 8 chars 
min 1 upper 
min 1 lower 
min 1 numeric 
min 1 special char which can ONLY be one of the following:$|~=[]'[email protected] (and the password can contain no other special chars besides these) 

.

것은 나는이 마련했지만 그냥 작동하지 않습니다

"^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])**(?(?!.*[^$|~=[\]'_\[email protected]])|([^\W\w])).*$** 

그것은 내가 잘못된 입력 모두를 해결합니다.

"(?(?!.*[^$|~=[\]'_\[email protected]])|([^\W\w])).*$" 

내가 첫 번째 부분의 일을 알고, 그래서 내가 그들을 함께 작동하도록 실종 : 자체

이 반면 (특수 문자에 대한)이 작업을합니까?

또는이를 달성하는 훨씬 간단한 방법이 있습니까?

당신이 정말로 하나의 정규식 패턴에서 그렇게하려면 (.NET 환경)

답변

3

: 트릭을 할해야

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$|~=[\]'[email protected]])[a-zA-Z0-9$|~=[\]'[email protected]]{8,}$ 

. 우리는 소문자, 대문자, 숫자 및 기호를 미리 사용해야합니다. 문자 클래스에서 -을 끝까지 이동하거나 이스케이프 처리해야합니다. 그렇지 않으면 원하지 않는 문자 범위를 만듭니다. 그런 다음 정규 일치를 사용하여 허용되는 문자 만 있고 그 중 최소 8 개가 있는지 확인합니다.

그러나 일반적으로 여러 테스트를 수행하는 것이 훨씬 더 좋습니다. 개별적으로 이러한 패턴을 실행

[a-z]      // does the input contain a lower case letter? 
[A-Z]      // does the input contain an upper case letter? 
\d      // does the input contain a digit? 
[$|~=[\]'[email protected]]   // does the input contain one of the required symbols? 
[^a-zA-Z0-9$|~=[\]'[email protected]] // are there invalid characters? 

최초의 4 true을 반환해야하고, 마지막 하나는 false을 반환해야하는 위치. 또한 input.Length >= 8을 확인할 수 있습니다. 이렇게하면 훨씬 더 읽기 쉬운 코드가 만들어지고 에 대한 적절한 오류 메시지를 표시 할 수 있습니다. 조건이 충족되지 않습니다.

실제로 마지막 패턴은 원하는 문자 만 있도록하기 때문에 [^a-zA-Z0-9]에 "하나의 기호 조건이 있어야합니다"(두 방식 모두)를 단순화 할 수 있습니다. 그러나 그것이 물건을 더 많거나 적게 읽을 지 여부를 확신하지 못합니다.

+0

나는 많이 배웠다. +1 –

+0

나는 더 간단한 방법이 있어야한다는 것을 알았다. 너는 생명의 은인이야! 많은 감사! – user2300874

+0

@ user2300874 여러분을 환영합니다. 옆에있는 체크 표시를 클릭하여 대답을 수락하십시오. 그러면 미래 방문자가 귀하의 문제가 해결되었으며 (그리고 어떻게 해결되었는지) 알려주고 나에게 약간의 신용 (그리고 당신에게도 약간)을 줄 것입니다. 답변 수락에 대한 자세한 내용은 [FAQ의이 섹션] (http://stackoverflow.com/faq#howtoask)을 참조하십시오. –