반응형
이전 2025.04.22 - [Programing/javascript] - 날짜 형식 유효성 검사 함수 글의 응용 버전입니다.
날짜 선택 UI나 기간 검색 조건을 다룰 때, 사용자가 입력한 날짜 범위가 올바른 형식인지, 실제 존재하는 날짜인지, 그리고 시작일이 종료일보다 이른지 등을 확인하는 작업은 매우 중요합니다. 이 글에서는 YYYY-MM-DD ~ YYYY-MM-DD 형식의 문자열을 검증하는 checkRangeDateFormat 함수의 구조와 동작 방식을 소개합니다.
✨ 함수 코드 원문
function checkRangeDateFormat(input) {
const DATE_RANGE_PATTERN = /^\d{4}-\d{2}-\d{2} ~ \d{4}-\d{2}-\d{2}$/;
if (!DATE_RANGE_PATTERN.test(input)) return false;
const [start, end] = input.split(' ~ ');
const isValidDate = (dateStr) => {
const [y, m, d] = dateStr.split('-').map(Number);
const date = new Date(y, m - 1, d);
return date.getFullYear() === y && date.getMonth() === m - 1 && date.getDate() === d;
};
return isValidDate(start) &&
isValidDate(end) &&
new Date(start) <= new Date(end);
}
✨ 검증 절차 요약
1. 정규표현식 형식 검사
- 전체 문자열이 정확히 YYYY-MM-DD ~ YYYY-MM-DD 형태를 따르는지 검사합니다.
- 숫자 네 자리 연도, 두 자리 월, 두 자리 일이 각각 -로 구분되고, 두 날짜는 ~ 로 구분되어야 통과됩니다.
2. 각 날짜가 유효한지 검사
- isValidDate 함수는 문자열을 Date 객체로 만든 후, 실제 존재하는 날짜인지 확인합니다.
- 예를 들어 2023-02-30은 new Date(2023, 1, 30)으로 만들면 자동 보정되어 3월 2일이 되기 때문에, 이를 다시 역검증하여 유효성을 판단합니다.
3. 시작일이 종료일보다 빠른지 비교
- new Date(start) <= new Date(end) 조건으로 날짜 순서를 확인합니다.
✨ 사용 예시
checkRangeDateFormat('2023-01-01 ~ 2023-12-31'); // true → 정상적인 기간
checkRangeDateFormat('2023-02-29 ~ 2023-03-01'); // false → 2023년은 윤년 아님
checkRangeDateFormat('2023-01-01 ~ 2022-12-31'); // false → 종료일이 시작일보다 빠름
checkRangeDateFormat('2023-04-31 ~ 2023-05-01'); // false → 4월은 30일까지
checkRangeDateFormat('2023-05-01~2023-05-10'); // false → 구분자 공백 없음
checkRangeDateFormat('23-01-01 ~ 23-12-31'); // false → 연도 형식 불일치
✨ 결론
checkRangeDateFormat 함수는 날짜 형식, 실제 존재하는 날짜 여부, 시작일과 종료일의 논리적 순서까지 검증하는 완성도 높은 유틸리티 함수입니다. 기간 필터, 예약 시스템, 통계 검색 등 다양한 분야에서 사용하기 적합하며, 사용자 실수를 방지하는 데 유용합니다.
반응형
'Programing > javascript' 카테고리의 다른 글
| javascript 이메일 유효성 검사 (0) | 2025.04.22 |
|---|---|
| 국가별 여권번호 유효성 검사 (0) | 2025.04.22 |
| 윤년 기준으로 날짜 선택 옵션을 자동 변경하는 함수 (0) | 2025.04.22 |
| 생년월일 유효성 검사 함수 (0) | 2025.04.22 |
| 날짜 형식 유효성 검사 함수 (0) | 2025.04.22 |
| URL 형식 유효성 검사 함수 (0) | 2025.04.22 |
| 휴대폰 번호 유효성 검사 JavaScript (1) | 2025.04.21 |
| 긴 문자열 중간 생략을 위한 JavaScript 함수 (0) | 2025.04.21 |