날짜 및 시간 정규식 예제(yyyy-MM-dd hh:mm:ss)
yyyy-MM-dd hh:mm:ss 양식의 시간을 추출가능한 정규식 예제
예제)
\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) ([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])
날짜
년 : 4글자의 숫자
월 : 01, 02, ..., 09, 10, 11, 12
일 : 01, 02, ... 30, 31
시간
시 : 00, 01, 02, ... 21, 22, 23
분 : 00, 01, 02, ... 57, 58, 59
초 : 00, 01, 02, ... 57, 58, 59
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
위 사이트에서
2021-05-12 02:22:30
데이터를 넣고 위 정규식을 넣으면 추출되는 것을 확인 할 수 있다.
그리고 13월이나, 61분, 61초 등 양식에 맞지 않는 수를 입력하면 검출되지 않는다.
그러면 어떻게 사용하나?
spring @vaild 옵션
스프링을 개발하다보면 데이터를 검증해야 하는 일이 많다.
특히 controller에서 dto에 데이터를 자동으로 매핑받아 사용할 때! (@RequestBody)
@valid, @Pattern 애너테이션을 이용하면 간편하게 검증할 수 있다.
WookimDTO.class
@Setter
@Getter
@NoArgsConstructor
public WookimDTO{
@Pattern(regex = "\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) (0[1-9]|1[0-9]|2[0-3]):(0[1-9]|[1-5][0-9]):(0[1-9]|[1-5][0-9])", message = "날짜 포멧 안맞아요")
private String date;
}
위 정규식에 부합하여 데이터가 전부 조회되면 통과, 부합하지 않으면 예외가 발생한다.
WookimController.class
@RestController
public class WookimController{
@PostMapping(value ="/wookim/blog")
public ResponseEntity<Object> testMethod(@Valid @RequestBody WookimDTO wookimDTO
, BindingResult bindingResult) throws Exception{
if(bindingResult.hasErrors()){
return ResponseEntity.badRequest().body(bindingResult.getAllErrors());
}
....
}
}
@RequestBody DTO 앞에 @Valid 애너테이션을 붙여 해당 DTO 데이터가 전달될 때 DTO 내부의 검증 애너테이션들이 작동한다. 만약에 검증에 실패하면 파라미터로 추가한 BindingResult 객체에 예외 메시지가 저장된다.
예외 발생 여부는 bindingResult.hasError() 코드가 True 발생한것이다.
Json
{
"data" : "2021-13-21 12:12:12"
}
postman에서 데이터 전송하면!
"날짜 포멧이 안맞아요" 이런식으로 에러 메시지가 400 코드와 함께 나올 것이다.
2021-13-21 ... 와 같이 13월로 데이터를 보냈기 때문이다.
<시간 24:00:00 검출되는 문제 수정 완료 - 23.11.6>
!!! 제보자님께 감사드립니다!