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

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

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

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

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



답변

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

(?=.*\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. 나는 이것을 다음과 같은 문자 세트로 대체 할 것입니다 : [-+_!@#$%^&*.,?](물론 추가 할 수 있습니다!)


답변

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

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

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


답변

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


답변