문자열에 적어도 하나의 소문자, 대문자, 숫자 및 기호가 포함되어 있는지 확인


156

주어진 문자열에 다음 각 범주의 문자를 하나 이상 포함시키는 정규식은 무엇입니까?

  • 소문자
  • 대문자
  • 숫자
  • 상징

나는 즉, 각각의 세트에 대한 패턴을 알고 [a-z], [A-Z], \d_|[^\w](내가 그들을 수정 얻었다을하지 않았다?).

그러나 문자열을 순서에 상관없이 포함시키기 위해 어떻게 결합합니까?


어떤 플랫폼 / 정규 방언? Bart의 대답은 맞지만 예를 들어 미리보기 어설 션은 JavaScript에서 신뢰할 수 없습니다.
bobince

특히 어디에도 없습니다-정규식을 배우고 있습니다. 자바 스크립트에서 사용할 수있는 대안이 있습니까?
Amarghosh

@bobince 안녕하세요, lookahead 어설 션이 Javascript에서 신뢰할 수없는 이유를 찾으려고합니다. 이것에 대한 글이 있습니까?
Chris Bier 2013 년

@ChrisB : 정말 혼란스러운 IE / JScript 버그가 있습니다 : blog.stevenlevithan.com/archives/regex-lookahead-bug
bobince

답변:


349

하나의 정규 표현식이 필요한 경우 다음을 시도하십시오.

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

간단한 설명 :

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists

그리고 SilentGhost에 동의합니다 \W. 나는 이것을 다음과 같은 문자 세트로 대체 할 것입니다 : [-+_!@#$%^&*.,?](물론 추가 할 수 있습니다!)


마지막 .+으로 변경하면 .*어떻게됩니까? 로 실패한 테스트 사례를 만들 수 없습니다 .*. 이 맥락에서 그들은 동일합니까? "제로 또는 더 많은 캐릭터"는 괜찮을 것 같습니다.
Amarghosh

@ Amarghosh :이 경우 아무런 차이가 없습니다. 긍정적 인 예견 때문에 문자열에는 이미 4 자 이상이 포함되어 있습니다. 따라서 그 문제 .+.*또는 .{4,}그 문제 를 바꾸는 데 차이가 없습니다 .
Bart Kiers

약간의 설명을 기꺼이 추가하고 싶다면, 이러한 미리보기 조합이 각 문자 집합 중 적어도 하나가 존재하는지 어떻게 보장하는지 이해하는 데 어려움을 겪고 있습니다
Sharlike

@Sharlike, 이해하기 쉽도록 구문을 바꾸는 방법을 모르겠습니다. 특히이 작은 주석 상자에서. 나는 당신이 이것을 읽는 것이 좋습니다 : regular-expressions.info/lookaround.html 그리고 여전히 질문이 있다면, 당신 자신의 질문을 게시하십시오. 행운을 빕니다!
바트 키 어스

4
@ikertxu, 다음과 같이 시도하십시오 :^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
Bart Kiers

20

바트 키 어스, 정규식에 몇 가지 문제가 있습니다. 가장 좋은 방법은 다음과 같습니다.

(.*[a-z].*)       // For lower cases
(.*[A-Z].*)       // For upper cases
(.*\d.*)          // For digits

이런 식으로 시작, 끝 또는 중간에 상관없이 검색합니다. 귀하의 복잡한 암호에 많은 문제가 있습니다.


5
OP가 요청한대로 기호를 확인하고 있지 않습니다.
Casimir

5

이 세 그룹을 개별적으로 일치시키고 모두 존재하는지 확인하십시오. 또한 [^\w]너무 넓게 보이지만 원하는 경우로 대체 할 수 있습니다 \W.


감사. 나는 \ W를 몰랐다. 단어가 아닌 단어와 일치하는지 찾아 보았습니다. \ W와 [\ W] 사이에 차이가 있습니까? [\ W]가 중복입니까?
Amarghosh

@Amarghosh, 그래, \W[\W]같은 결과.
Bart Kiers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.