
지난 글에서 전화번호를 PhoneNumberField를 이용해서 phone필드에 저장하려고 설정했는데,

프로젝트를 진행하면서 이 PhoneNumberField가 제대로 작동하지 않는 것을 확인했다 ㅠㅠ
(내 문제일수도^^)
그래서 찾아보니까 전화번호를 CharField로 받아서, 유효성 검사를 하는 방법도 있어서
이 방법을 활용해보려고 한다!
Sample Code ]🔗 참고한 글
from django.core.validators import RegexValidator
class Person(models.Model):
phoneNumberRegex = RegexValidator(regex = r"^\+?1?\d{8,15}$")
phoneNumber = models.CharField(validators = [phoneNumberRegex], max_length = 16, unique = True)
흠,, 대충 RegexValidator라는 것을 이용해서 regex에 원하는 정규식을 넣고,
이를 이용해서 CharField에 입력된 값의 유효성 검증을 하는 것 같다!
RegexValidator를 조금 더 자세히 알아보자!
RegexValidator ]class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)
regex로 설정한 정규식으로 검색하여, 유효성을 판단해주는 기능을 한다.
message와 code를 사용해서 ValidatorError를 발생시킨다.Parametersregexre.search()를 사용해서 제공된 값 내에서 검색할 정규식 패턴이다.re.compile()로 만든 문자열 또는 미리 컴파일된 정규식일 수도 있다.default는 빈 문자열messageValidationError에서 사용할 오류 메시지default는 "Enter a valid value."codeValidationError에서 사용할 오류 코드default는 "invalud"inverse_matchregex에 대한 일치 모드default는 Falseflagsregex를 컴파일할 때 사용되는 regex flagsTypeError가 표시된다. default는 0그런데 예제 코드에 있는 정규식 코드는 좀 마음에 안 들어서 수정해보려고 한다.
내가 원하는 형식은 010-1234-5678 max_length는 11로 지정하고 싶다.
r'^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})'
01([0|1|6|7|8|9]?): 01 또는 01+0/1/6/7/8/9의 형태-?: -가 있어도 되고 없어도 된다.([0-9]{3,4}): 0부터 9까지의 숫자가 3~4개 있어야 한다.([0-9]{4}): 0부터 9까지의 숫자가 4개 있어야 한다.010-1234-5678 → ⭕01012345678 → ⭕01212341234 → ❌010-1234-56789 → ❌이제 정규식도 수정했으니 User 필드를 다시 수정해보자!
class User(AbstractUser):
nickname = models.CharField(max_length=50)
phoneNumberRegex = RegexValidator(regex = r'^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$')
phone = models.CharField(validators = [phoneNumberRegex], max_length = 11, unique = True)
추가적으로
CharField에 max_length를 11로 지정하고 (CharField 사용할 때 꼭 지정해줘야 함)unique를 True로 설정해준다. (동일한 전화번호로 중복해서 가입하지 못하도록 설정)
이렇게 올바르게 입력하면 잘 저장되지만,

형식에 맞지 않은 값을 입력하면 이렇게 "올바른 값을 입력하세요."라고 뜬다!