Regular Expression

이지훈·2021년 6월 29일
0

TIL

목록 보기
30/33
post-thumbnail

1. 정규표현식이란?

A regular expression (regex) defines a search pattern for strings 이라고 합니다.

즉, 정규식이란 문자열에 대한 검색 패턴을 정의함으로써 다양한 형태의 문자열 입력에 대해서 다양한 경우의 수를 간결하게 처리하기 위해 사용합니다.

이 정규표현식은 다양한 언어에서 범용으로 사용되므로 문법을 익히기만한다면 java, python, javascript 등 유사하게 작성할 수 있습니다.

2. 정규표현식 문법

기호의미
.모든 문자와 일치
^문자의 시작을 표현
$문자의 끝을 표현
왼쪽이나 오른쪽 문자(또는 패턴)과 일치
[]문자 집합 구성원과 일치. 만약 [kim] 일 경우 k or i or m
[^]문자 집합 구성원과 제외하고 일치. 만약 [^kim] 일 경우 k, i, m을 제외한 문자들
-범위 정의 또는 핸드폰 번호 regex의 경우 가운데 '-' 의미
a-z소문자 a부터 z까지 문자
A-Z대문자 A부터 Z까지 문자
0-90부터 9까지의 숫자

등등 많은 것이 있으며 자세한 것은 여기를 참고하세요.

3. 정규식 예시

종류예시의미
이름^[가-힣]{2,4}$2~4자리의 한글만 입력가능
나이^[0-9]{1,3}$1~3 자리로 입력 가능
닉네임^[가-힣ㄱ-ㅎa-zA-Z0-9._-]{2, 16}$2~16자리내에서 한글, 소문자, 대문자, 언더스코어만 입력가능
핸드폰 번호^[0-9]{3}[-]+[0-9]{3,4}[-]+[0-9]{4}$^[0-9]{10,11}$
이메일^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$mail11@gmail.com 과 같은 형식으로 @과 .을 반드시 포함한 형태만 입력가능
비밀번호^[A-Za-z0-9@#$%^&+=]{8,}8~15 자리에 맞춰 대소문자, 숫자, 특수문자 포함가능한 형태로 입력

4. Django의 Views.py에서 사용 예시

만약 name의 정규표현식을 작성해 예외사항을 걸러낸다고 할 때, 파이썬 내부 모듈을 import 해와서 사용합니다.

import re

from django.views import View
from django.http  import JsonResponse

from user.models import # models.py class 이름

class SignUpView(View):
    def post(self, request):
        data = json.loads(request.body)
        
        # 정규표현식을 객체에 할당
        name_regex = "^[가-힣]{2,4}$"

# 만약 name이라는 데이터를 입력받을 때 정규표현식의 규칙을 지키지 않았다면 메세지를 return한다.
	if re.search(name_regex, data['name']) == False:
            return JsonResponse({"MESSAGE": "2~4 글자의 한글을 입력해 주세요."})

5. re.search와 re.match의 차이점

4번의 예시를 버시면 re.search() 함수를 사용한 것을 보실 수 있습니다. re.search는 특정 문자열이 일치하는 지만 판단하고 만약 패턴이 일치하는 특정 문자열 중 첫번째 문자열을 리턴합니다.

re.match는 문자열의 앞 부분이 매치되는가를 체크한다.


추가 자료

정규표현식이란? : https://www.vogella.com/tutorials/JavaRegularExpressions/article.html

정규표현식 내부모듈 사용법 : https://docs.python.org/3/library/re.html

휴대폰번호 010 형식으로 정규표현식 작성법 : https://jamesdreaming.tistory.com/197

주민번호 정규 표현식 작성법 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=javaking75&logNo=220083169851

url 주소 정규 표현식 : https://cholol.tistory.com/457

Django viewset 작성예시 : https://www.django-rest-framework.org/api-guide/viewsets/

profile
꾸준하게 🐌

0개의 댓글