반응형
닉네임을 변경하는 API에서, 요청하는 DTO의 검증을 달고 있었다.
public record UserUpdateNicknameReq(
@NotBlank(message = "닉네임은 빈 값이면 안 됩니다.")
@Size(min = 1, max = 35, message = "닉네임은 1자 이상, 35자 이하여야 합니다.")
@Pattern(regexp = "^[a-zA-Z0-9가-힣]$", message = "닉네임은 한글 및 숫자와 영어만 가능합니다.")
String nickname
) {
}
원래 DTO는 @Pattern(regexp = "^[a-zA-Z0-9가-힣]$ 였는데, 닉넴을 monkey→1 로 바꾸는 건 됐는데, 1→monkey로 바꾸니 변경이 안 됐다.
다른 블로그를 보니 끝에 *를 붙인, @Pattern(regexp = "^[a-zA-Z0-9가-힣]*$ 로 하니 정상적으로 변경되었다.
정규표현식을 까먹어서 다시 확인해보니, ^는 문자의 시작을, $는 문자의 끝을 의미한다. 그리고 […]는 한 문자에 대한 허용 범위를 나타낸다. 즉, ^[a-z]$ 는 a~z인 하나의 문자. 그래서 위에서 1로 변경이 됐던 거였다. 하나의 문자만 변경 가능했던 것.
그러면 ^[a-z]*$ 이 됐던 건, * 가 0개 이상의 a~z인 문자가 존재할 때를 의미한다. 그래서 정상적으로 변경된 것,
여기에 더해, 걸러진 문자의 길이까지 정해줄 수 있었다. […]{n}은 딱 n개, {n,}는 n개 이상, {n,m}은 n개이상 m개 이하다. 그러면 @Pattern 어노테이션 빼고는 필요가 없어진다. 이를 고치면,
public record UserUpdateNicknameReq(
@Pattern(
regexp = "^[a-zA-Z0-9가-힣]{1,35}$", // 영대소문자, 한글 완성자 및 숫자가 1자 이상 35자 이하
message = "닉네임은 한글 및 숫자와 영어로 1자 이상 35자 이하만 가능합니다."
)
String nickname
) {
}
최종 코드는 이렇게 할 수 있다.
반응형
'TIL ✍️' 카테고리의 다른 글
24/07/29(월) 87번째 TIL : 어노테이션으로 AOP 적용하기 (0) | 2024.07.29 |
---|---|
24년 6월 24일(월요일) - 86번째 TIL : Querydsl 일대다 조회 시 중복 요소 처리 (0) | 2024.06.24 |
24년 6월 20일(목요일) - 84번째 TIL : JPA 에서 SoftDelete 처리 (0) | 2024.06.20 |
24년 6월 18일(화요일) - 83번째 TIL : Access token, Refresh token 응답 및 저장 방식 (1) | 2024.06.18 |
24년 6월 17일(월요일) - 82번째 TIL : JJWT 0.11.5 -> 0.12.5 변경점 (0) | 2024.06.17 |