파이썬, 비밀번호가 문자/숫자/특수문자 조합이고 8자리 이상 검증

[ main.py]

# 비밀번호 검증 함수
# 비밀번호가 문자, 숫자, 특수문자 조합이고 8자리 이상인지 검증
import re

# 정규식 이용
def validate_password(password):
  """
  비밀번호가 문자, 숫자, 특수문자 조합으로 8자리 이상인지 검증합니다.

  Args:
    password: 검증할 비밀번호 문자열

  Returns:
    True: 유효한 비밀번호
    False: 유효하지 않은 비밀번호
  """
  regex = "^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{8,}$"
  return bool(re.fullmatch(regex, password))


# 문자별 확인 방식
def validate_password_char_check(password):
  """
  비밀번호가 문자, 숫자, 특수문자 조합으로 8자리 이상인지 문자 체크 방식으로 검증합니다.

  Args:
    password: 검증할 비밀번호 문자열

  Returns:
    True: 유효한 비밀번호
    False: 유효하지 않은 비밀번호
  """
  if len(password) < 8:
    return False

  has_letter = False
  has_digit = False
  has_special = False
  special_chars = "!@#$%^&*"

  for char in password:
    if 'a' <= char <= 'z' or 'A' <= char <= 'Z':
      has_letter = True
    elif '0' <= char <= '9':
      has_digit = True
    elif char in special_chars:
      has_special = True

  return has_letter and has_digit and has_special


# 테스트
print(validate_password_char_check("Password123!"))  # True
print(validate_password("Password123!"))  # True

print(validate_password_char_check("Pass123"))  # False (특수문자 없음)
print(validate_password("Pass123"))  # False (특수문자 없음)

print(validate_password_char_check("Password!"))  # False (숫자 없음)
print(validate_password("Password!"))  # False (숫자 없음)

print(validate_password_char_check("123456!"))  # False (문자 없음)
print(validate_password("123456!"))  # False (문자 없음)

print(validate_password_char_check("short"))  # False (8자리 미만)
print(validate_password("short"))  # False (8자리 미만)

 

[실행 결과]

True
True
False
False
False
False
False
False
False
False

 

반응형

+ Recent posts