Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 비밀번호 유효성 검사하기: 정규식(re) 모듈 활용법

사용자로부터 입력받은 비밀번호가 보안 기준에 맞는지 확인하는 것은 웹 서비스와 애플리케이션 개발에서 매우 중요한 작업입니다. 이 글에서는 파이썬의 re(정규 표현식) 모듈re.search() 함수를 사용하여 비밀번호가 유효한지 검사하는 프로그램을 만들어 보겠습니다.

유효한 비밀번호의 조건

이 예제에서는 다음 규칙을 모두 만족해야 유효한 비밀번호로 판단합니다.

  • 길이 조건: 최소 8자 이상이어야 합니다.
  • 소문자 포함: 알파벳 소문자(a~z)가 반드시 하나 이상 있어야 합니다.
  • 대문자 포함: 알파벳 대문자(A~Z)가 반드시 하나 이상 있어야 합니다.
  • 숫자 포함: 숫자(0~9)가 반드시 하나 이상 있어야 합니다.
  • 특수 문자 포함: _, @, $ 중 하나 이상이 포함되어야 합니다.
  • 공백 제외: 공백 문자가 포함되면 안 됩니다.

예제 코드

# 파이썬으로 비밀번호 유효성 검사하기
import re

password = input("비밀번호를 입력하세요 ::>")
flag = 0

while True:
    if len(password) < 8:
        flag = -1
        break
    elif not re.search("[a-z]", password):
        flag = -1
        break
    elif not re.search("[A-Z]", password):
        flag = -1
        break
    elif not re.search("[0-9]", password):
        flag = -1
        break
    elif not re.search("[_@$]", password):
        flag = -1
        break
    elif re.search(r"\s", password):
        flag = -1
        break
    else:
        flag = 0
        print("유효한 비밀번호입니다")
        break

if flag == -1:
    print("유효하지 않은 비밀번호입니다")

실행 결과

비밀번호를 입력하세요 ::> vbnA@hj9
유효한 비밀번호입니다

코드 설명

re.search() 함수의 역할

re.search(pattern, string)은 문자열 전체에서 지정한 패턴과 일치하는 부분이 있는지 탐색합니다. 일치하는 내용이 있으면 match 객체를 반환하고, 없으면 None을 반환합니다. 따라서 not re.search(...) 형태로 작성하면 "해당 조건이 하나도 없을 때"를 손쉽게 판별할 수 있습니다.

검사 로직 흐름

  1. 입력받은 비밀번호의 길이가 8자 미만인지 먼저 확인합니다.
  2. 소문자, 대문자, 숫자, 특수 문자(_, @, $)가 각각 존재하는지 순서대로 검사합니다.
  3. r"\s" 패턴으로 공백 문자가 포함되어 있는지 확인합니다.
  4. 모든 조건을 통과하면 flag를 0으로 설정하고 유효하다는 메시지를 출력합니다.
  5. 조건 중 하나라도 실패하면 break로 루프를 빠져나와 유효하지 않다는 메시지를 출력합니다.

참고 사항

원본 코드에는 들여쓰기 오류가 있어 그대로 실행하면 IndentationError가 발생할 수 있습니다. 위 예제 코드는 들여쓰기를 올바르게 수정한 버전이므로 바로 복사해서 실행해 볼 수 있습니다. 또한 실무에서는 while True 대신 함수로 분리하거나 여러 조건을 하나의 정규식으로 결합하는 방식도 널리 사용됩니다.