TIL 29. 정규표현식(e-mail, password 유효성)

윤현묵·2021년 8월 23일
14

Django

목록 보기
5/17
post-thumbnail

정규 표현식 (Regular Expression)

정규 표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는데 사용하는 표현식(Expression)으로 텍스트에서 특정 문자열을 검색하거나 치환할 때 흔히 사용됩니다. 예를 들어, 웹페이지에서 전화번호나 이메일 주소를 발췌한다거나 로그파일에서 특정 에러메시지가 들어간 라인들을 찾을 때 정규 표현식을 사용하면 쉽게 구현할 수 있습니다. 정규 표현식은 간단히 정규식, Regex 등으로 불리기도 합니다.

  • email 주소 유효성 검사 정규표현식: '계정@도메인.최상위도메인' 형식의 데이터를 찾는 정규표현식입니다.
    '^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'

-. ^: 패턴의 시작을 의미
-. $: 패턴의 종료를 의미
-. a-zA-Z0-9(a~z, A~Z, 0~9. 즉 알파벳(대소문자)+숫자를 의미)

  • 휴대폰 번호 유효성 검사 정규표현식
    '\d{3}-\d{3,4}-\d{4}'
    '3자리 숫자 - 3자리 or 4자리 숫자 - 4자리 숫자' 형태의 데이터를 찾는 정규표현식

  • 비밀번호 유효성 검사 정규표현식
    최소 8 자, 최소 하나의 문자, 하나의 숫자 및 하나의 특수 문자 :
    "^(?=.*[A-Za-z])(?=.*\d)(?=.*[@@!%*#?&])[A-Za-z\d@@!%*#?&]{8,}$"

사용법

먼저 정규표현식을 지원하는 모듈 re를 import합니다.

import re
a = re.compile('^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')

#유효성 검사
b = a.match('abc@gmail.com')
c = a.match('xyzxzyxzy')

print(b)
-> <re.Match object; span=(0, 13), match='abc@gmail.com'>
print(c)
-> None            #유효성 검사를 통과하지 못하면 None을 반환한다.

아래는 정규표현식 유효성 검사를 활용하여 작성한 코드 일부입니다.

 data                = json.loads(request.body)
 email               = data["email"]
 password            = data["password"]
 email_validation    = re.compile("^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
 password_validation = re.compile("^.*(?=^.{8,}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%*^&+=]).*$")

 if email == "" or password == "":
    return JsonResponse({"message":"KEY_ERROR"}, status=400)
            
 if not email_validation.match(email):
    return JsonResponse({"message":"EMAIL_VALIDATION_ERROR"}, status=400)

 if not password_validation.match(password):
    return JsonResponse({"message":"PASSWORD_VALIDATION_ERROR"}, status=400)

profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글