많은 사이트에서 정규표현식을 사용하고 있다.
그래서 username, password, nickname 모두에 정규표현식을 사용하려고 한다.
우선 username과 nickname은 entity에서 unique = true
를 사용하여 중복되는 값이 저장되지 않게 설정하였다.
그리고 정규표현식은 dto에서 해결하였다.
우선 가장 먼저 할 일은 의존성 추가를 해야 한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
그 다음 @Pattern
어노테이션을 사용해 어떠한 표현 사용할지 설정한다.
@Pattern(regexp = "^[a-zA-Z0-9]{4,12}$", message = "영문과 숫자를 포함하여 4자 이상 12자 이하로 적어주세요.")
@Pattern(regexp = "^(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-zA-Z]).{8,20}$", message = "영문과 숫자 그리고 특수문자를 포함하여 8자 이상 20자 이하로 적어주세요.")
@Pattern(regexp = "^[a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ]{3,}$", message = "3자 이상으로 적어주세요.")
마지막으로 controller에서 지정한 정규표현식을 적용할 수 있도록 @Validated
어노테이션을 추가해주면, 정상적으로 지정한 정규표현식이 적용되어 지켜지지 않은 경우에는 예외가 발생한다.
이 마지막 @Validated 어노테이션을 깜빡해 왜 정규표현식 작동 안하지? 하는 일 없도록 하기!!