[drf] 정규 표현식

최동혁·2023년 5월 13일
0

DRF

목록 보기
16/19

문법

문자

  • a: 문자 "a"와 정확히 일치.
  • [abc]: 문자 "a", "b", "c" 중 하나와 일치.
  • [^abc]: 문자 "a", "b", "c" 이외의 문자와 일치.

메타 문자

  • .: 어떤 문자와 일치. (줄바꿈 문자 제외)
  • ^: 문자열의 시작을 나타냄.
  • $: 문자열의 끝을 나타냄.
  • \b: 단어 경계를 나타냄.
  • \d: 숫자와 일치.
  • \D: 숫자가 아닌 문자와 일치.
  • \w: 알파벳 문자나 숫자와 일치.
  • \W: 알파벳 문자나 숫자가 아닌 문자와 일치.
  • \s: 공백 문자와 일치.
  • \S: 공백 문자가 아닌 문자와 일치.

수량자

  • *: 0개 이상의 문자와 일치.
  • +: 1개 이상의 문자와 일치.
  • ?: 0개 또는 1개의 문자와 일치.
  • {n}: n개의 연속된 문자와 일치.
  • {n,}: 최소 n개 이상의 연속된 문자와 일치.
  • {n,m}: 최소 n개 이상, 최대 m개의 연속된 문자와 일치.

그룹화

  • (abc): "abc"와 일치하는 그룹을 형성.
  • |: or 연산자로, 주어진 문자열 중 하나와 일치.

이스케이프

  • \: 다음 문자를 이스케이프.
  • 예를 들어 .는 실제 점 문자와 일치.

휴대폰 번호

phone_number_regex = re.compile(r"^01[016789]\d{7,8}$")
  • 파이썬에서 이스케이프 문자인 (백슬래시)를 이용하려면 앞에 백슬래시 하나 더 써서 \ 이런식으로 써야함.
  • 하지만 시작하기 전에 r(raw string)을 명시해주면 백슬래시를 이스케이프 문자로 해석하지 않고 문자 그대로 해석함.
  • ^01[016789]
    • ^은 문자열의 시작을 나타냄. 즉, 01로 시작한다는 뜻
    • [] 이건 그 안에 문자중 하나와 일치해야한다는 뜻. 즉, 01 다음에 0, 1, 6, 7, 8, 9 중 하나가 나와야함.
    • 010, 011, 016, 017, 018, 019
  • \d는 숫자와 일치해야 한다는 뜻.
    • 왜 앞에 010 이런걸 \d로 안썻냐면, 특정 숫자를 가리켜야 하기 때문인데, \d는 전체 숫자를 뜻함.
  • \d{7,8}$
    • {n,m}은 최소 n개 이상, 최대 m개의 연속된 문자와 일치.
    • 즉 숫자인데, 최소 7개에서 8개의 숫자로 이루어져야함.
    • $는 문자열의 끝을 나타냄.

010, 011, 016, 017, 018, 019 중 하나로 시작을 하고, 뒤에는 7 ~ 8 자리의 숫자들로 이루어진 핸드폰 번호 정규식이다

비밀번호

password_regex = re.compile(
    "^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
)
  • "^(?=.[A-Za-z])(?=.\d)(?=.[@@!%#?&])[A-Za-z\d@@!%*#?&]{8,}$": 이 패턴은 다음 조건을 충족하는 비밀번호를 나타냅니다.
  • ?=.*은 전방탐색. 즉, 현재 위치에서 뒤에 나오는 조건에 일치하는 부분을 탐색해준다.
  • ()는 안에 써있는 조건을 만족하는 그룹을 형성해줌. 즉, 여러 조건을 가진 정규식 조건을 걸고 싶을 때 그룹화 하는 것.
  • []는 안에 있는 조건을 만족.
  • ^
    • 문자열의 시작을 의미.
  • (?=.*[A-Za-z])
    • [A-Za-z]는 대문자 소문자 상관없이 모든 알파벳이 나와야 함.
    • 즉, 무조건 알파벳을 무조건 포함하는 그룹(조건).
  • (?=.*\d)
    • 최소한 하나의 숫자가 있어야 함을 나타내는 그룹(조건).
  • (?=.[@@!%#?&])
    • 최소한 하나의 특수 문자($, @, !, %, *, #, ?, &)가 있어야 함을 나타내는 그룹(조건).
  • [A-Za-z\d@@!%*#?&]{8,}
    • 알파벳, 숫자, 특수 문자 중 하나 이상을 포함하여 총 8자리 이상이어야 함을 나타냄.
    • 앞선 그룹들과 조건이 중복되었는데, 조건을 더 강화하고 조금 더 정확한 비밀번호 유효성 검사를 수행하기 위함.
    • 그리고 적어도 이러한 조건들을 충족하면서 8글자 이상을 만족해야한다는 뜻.

즉, 대소문자 중 적어도 하나의 알파벳을 포함하고, 숫자를 포함하고, 특수문자를 포함하고, 이러한 세 조건을 전부 충족하면서 최소 8 글자 이상을 만족하는 정규 표현식이다.

profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글