import re
password_checker = re.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,30}$" )
mat = re.search(password_checker, password)
쓰는 것만 써서 이렇게 새로운 형태를 만나면 굳어버린다. 이 참에 연습할겸 분석을 했다.
ref: Blog, COGNEX, Mozilla
import re
password_checker = re.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,30}$" )
mat = re.search(password_checker, password)
위 정규표현식은 다음의 조건을 충족시키는 문자를 찾기 위한 것이다.
(?=.[a-z])(?=.[A-Z])(?=.\d)(?=.[!@#$%^&*])은 이러한 조건들을 하나씩 체크하는 것이다. 즉, 4개의 조건 중 1개라도 거짓일 경우 4개의 그룹은 모두 거짓으로 계산될 것이다.
아래의 블로그 포스팅들을 보면 마치 AND 연산처럼 여러개의 조건을 이어붙인거라고 할 수 있다.