JUNG씨 2022. 11. 28. 00:20

🔍 회원가입 시 비밀번호가 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,}$'

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