주어진 문자열에 다음 각 범주의 문자를 하나 이상 포함시키는 정규식은 무엇입니까?
- 소문자
- 대문자
- 숫자
- 상징
나는 즉, 각각의 세트에 대한 패턴을 알고 [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
.