IT/앱사용방법

파이썬 회원가입 등 비밀번호 입력 시 점검하는 정규식

볼통통알파카 2022. 7. 5. 23:32
반응형

과거에는 비밀번호를 입력하면 그대로 값을 DB에 반영했었는데 현재는 복잡도와 길이를 검증하여 승인 처리를 해야 한다.

패턴은 아래와 같다.

 

2가지 이상(문자, 숫자, 특수문자) 8자리 이상 검사

 PT1 = ('^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$')
 PT2 = ('^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
 PT3 = ('^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
 PT4 = ('^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
 PT5 = ('^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
 PT6 = ('^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')

 

문자구성 상관없이 10자리 이상 검사

 PT10 = ('^[A-Za-z\d!@#$%^&*]{10,}$')

 

파이썬 회원가입 비밀번호 검증 예시
from flask import request, redirect
from Models import User
from Models import db
import re
@app.route('/register', methods=['POST'])
def register():
   userid = request.form.get('userid')
   password = request.form.get('password')
   confirm_password = request.form.get('confirm_password')
   if password != confirm_password:
   return make_response("비밀번호가 일치하지 않습니다.", 200) 
 
   if not check_password(password):
   return make_response("비밀번호 조합규칙에 맞지 않습니다.", 200) 
   else:
   usertable=User() 
   usertable.userid = userid
   usertable.password = password
 
   db.session.add(usertable)
   db.session.commit()
   return make_response("회원가입 성공", 200) 

def check_password(password):
   PT1 = re.compile('^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$')
   PT2 = re.compile('^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
   PT3 = re.compile('^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
   PT4 = re.compile('^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
   PT5 = re.compile('^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
   PT6 = re.compile('^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
   PT7 = re.compile('^[A-Za-z\d!@#$%^&*]{10,}$')
   for pattern in [PT1, PT2, PT3, PT4, PT5, PT6, PT7]:
      if pattern.match(password):
      return True
   return False
반응형