We-Co

[Python] 정규식 표현 - 비밀번호 유효성 검사 본문

Python/Algorithm

[Python] 정규식 표현 - 비밀번호 유효성 검사

위기의코딩맨 2023. 7. 24. 14:22
반응형

안녕하세요. 위기의 코딩맨입니다.

오늘은 일반적으로 개발자로써, 자주 사용하게될 비밀번호 유효성 검사하는법을 간단하게 알아보려합니다!

 

다음, 네이버, 구글에서 회원가입을 위해 

아이디를 입력하고

비밀번호를 입력하는데 여러 조건들이 충족해야만 회원가입이 진행된것을 보신적 있으신가요?!

 

출처 : naver 회원가입

 

해당 화면조건을 확인하기 위해 정규식을 대체적으로 사용하고 있습니다.

여기서 계속 말하는 정규식이란 무엇일까요?

Regex로 표현을 자주하며,

사전적으로는 특정한 규칙을 갖고있는 문자열의 집합을 의미하고 있습니다.

이런 의미를 갖고있는 정규식을 입력된 값을 보고 해당 패턴을 찾아내는 방식입니다. ㅎㅎ

정규식은 나름 간단하게 표현을 있지만 표현 방식을 따로 외우지 않으면 이해가 어렵다는 단점 존재합니다!

 

이제 python으로 이 정규식을 이용해서 비밀번호 유효성 검사를 진행하는 코드를 보도록 하겠습니다.

 

import re

# 비밀번호 정규화
def regex_password(pw):
    # 최소한 하나의 영문자 포함(대문자 소문자)
    # 최소한 하나의 숫자 포함
    # @!%*#?& 특수문자 포함
    # 8~16글자 
    pattern = r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,16}$'
    if re.match(pattern, pw):
        return True
    else:
        return False
    return

 

자 생각보다 간단하죠?!

re 라이브러리는 파이썬에서 기본적으로 제공되는 정규식을 지원하는 라이브러리입니다.

 

자 이제 소스를 보도록 하겠습니다.

regex_password 함수를 pw의 인자를 받도록 작성해주고,

정규식을 설정해 주도록 합니다!

 

 

^는 문자열의 시작을 의미합니다.

?=.*[A-Za-z]는 대문자, 소문자 최소한의 하나 이상의 영문자를 검색하는 부분입니다.

?=.*\d는 최소한 하나의 숫자를 포함하는지를 검색하는 부분입니다. \d는 숫자를 의미합니다.( 0 ~ 9 )

?=.*[@$!%*#?&]는 [] 안에 있는 특수문자가 존재하는지 검색하는 부분입니다.

[A-Za-z\d@$!%*#?&]{8,16}$ 부분은 총 최소 8글자 최대 16글자로 되어있는지 체크하는 부분입니다.

 

위에 조건에 해당이 되면 True, 조건에 반하면 False를 내뱉도록 함수를 간단하게 만들어 보았습니다.

생각보다 간단하죠?!

 

여기서 이제 한단계 더 넘어가면

순차적인 숫자, 문자가 포함되지 않도록 조건을 걸게되면 정규식 조건이 길어질 수 있습니다.

(?!.*(ABC|BCD|CDE|123|234)) 해당 조건을 추가하게되면

ABC, BCD, CDE, 123,234의 조건이 걸려있으면 순차적인 문자열을 사용했다고 판단합니다.

0~9, A~Z까지 진행하려면.. 소스가 조금 길어지겠죠?ㅎㅎㅎ

 

 

 

오늘은 개발자로 생활하면서 자주 사용하게되는 정규식을 사용하여 비밀번호 유효성 검사하는 방법을 알아보았습니다.

오랜만에 개발 포스팅을 작성하는것 같네요 ㅎㅎ

반응형