본문 바로가기
TIL(Today I Learned)

221125 TIL

by JUNG씨 2022. 11. 28.

🔍 회원가입 시 비밀번호가 8-20자이고 하나이상의 영문자, 숫자, 특수문자를 포함하도록 설정하는 정규식

 

import re #정규식 처리 모듈


class UserSerializer(serializers.ModelSerializer):
    
    password2 = serializers.CharField(style={'input_type':'password'}, write_only=True)
    
    class Meta:
        model = User
        fields=['email', 'username', 'password','password2', 'usd']
        
    def validate(self, data):
        password = data['password']
        password2 = data['password2']

        # username의 길이가 8자가 넘을 때 예외처리
        if len(data.get("username", "")) > 8:
            raise serializers.ValidationError(
            detail={"username": "username은 8자리 이하로 설정해주세요."})
            
        # password 생성 조건 (8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요)
        if password == None:
            raise serializers.ValidationError(
                detail={"password": "비밀번호는 8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요합니다."}
            )
        
        # 패스워드 조건 불일치(정규식 표현)
        if not re.search(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$',password):
                raise serializers.ValidationError(
                detail={"password": "비밀번호는 8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요합니다."}
            )
                
        # 패스워드 재확인 
        if password != password2:
            raise serializers.ValidationError(
                detail={"password": "password가 불일치합니다! 다시 확인해주세요"}
            )
        
        return data

 

r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$'

 -> 정규식에 대해 공부해볼 것!

'TIL(Today I Learned)' 카테고리의 다른 글

221129 TIL  (0) 2022.11.30
221128 TIL  (0) 2022.11.28
221124 TIL  (0) 2022.11.24
221123 TIL  (0) 2022.11.23
221122 TIL  (0) 2022.11.23