Wookim

날짜 및 시간 정규식 예제(yyyy-MM-dd hh:mm:ss) 본문

programming language/Java

날짜 및 시간 정규식 예제(yyyy-MM-dd hh:mm:ss)

개발자인 경우 2021. 5. 12. 15:08

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.com/

 

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>
!!! 제보자님께 감사드립니다!

 

Comments