반응형
날짜 입력값은 다양한 형식으로 존재할 수 있으며, 단순한 문자열 검사만으로는 실제 존재하지 않는 날짜까지 통과될 수 있습니다. 이를 방지하기 위해, YYYY-MM-DD 형식의 문자열이 실제 유효한 날짜인지까지 검사하는 함수가 필요합니다. 이 글에서는 정규표현식과 JavaScript의 Date 객체를 조합하여 날짜 형식과 존재 여부를 동시에 확인하는 함수 isValidDateFormat을 살펴보겠습니다.
✨ 함수 코드 원문
function isValidDateFormat(dateString) {
const DATE_PATTERN = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
if (!DATE_PATTERN.test(dateString)) return false;
const [year, month, day] = dateString.split('-').map(Number);
const date = new Date(year, month - 1, day);
return date.getFullYear() === year &&
date.getMonth() === month - 1 &&
date.getDate() === day;
}
✨ 정규표현식 검사 단계
- 형식: YYYY-MM-DD
- 연도: 4자리 숫자 (\d{4})
- 월: 01부터 12까지 허용 ((0[1-9]|1[0-2]))
- 일: 01부터 31까지 허용 ((0[1-9]|[12]\d|3[01]))
하지만 이 정규식만으로는 2023-02-31처럼 존재하지 않는 날짜도 통과될 수 있기 때문에, 이후 실제 날짜 객체를 생성하여 정확성을 다시 확인합니다.
✨ Date 객체를 통한 유효성 검사
- 문자열을 연, 월, 일로 분리하여 숫자로 변환
- JavaScript의 Date 객체를 생성할 때 자동으로 잘못된 날짜를 보정하는 특성이 있음
- 예: new Date(2023, 1, 31) → 자동으로 2023-03-03이 됨
- 따라서 실제로 new Date()로 생성한 날짜가 입력값과 일치하는지를 다시 비교
✨ 사용 예시
isValidDateFormat('2023-03-15'); // true → 유효한 날짜
isValidDateFormat('2023-02-29'); // false → 2023년은 윤년 아님
isValidDateFormat('2024-02-29'); // true → 2024년은 윤년
isValidDateFormat('2023-13-01'); // false → 13월은 없음
isValidDateFormat('2023-04-31'); // false → 4월은 31일까지 없음
isValidDateFormat('2023-00-10'); // false → 0월은 없음
isValidDateFormat('2023-05-00'); // false → 0일은 없음
isValidDateFormat('23-05-10'); // false → 연도 형식 오류
✨ 결론
isValidDateFormat 함수는 단순히 문자열 패턴만 검사하는 것이 아니라, 실제로 존재 가능한 날짜인지까지 정밀하게 검증할 수 있는 유용한 도구입니다. 프론트엔드 사용자 입력 검증, 백엔드 API 파라미터 검증 등 다양한 환경에서 안전하게 활용할 수 있습니다.
반응형
'Programing > javascript' 카테고리의 다른 글
| 국가별 여권번호 유효성 검사 (0) | 2025.04.22 |
|---|---|
| 윤년 기준으로 날짜 선택 옵션을 자동 변경하는 함수 (0) | 2025.04.22 |
| 생년월일 유효성 검사 함수 (0) | 2025.04.22 |
| 날짜 범위 형식 유효성 검사 함수 (1) | 2025.04.22 |
| URL 형식 유효성 검사 함수 (0) | 2025.04.22 |
| 휴대폰 번호 유효성 검사 JavaScript (1) | 2025.04.21 |
| 긴 문자열 중간 생략을 위한 JavaScript 함수 (0) | 2025.04.21 |
| 금액을 10원 단위로 반올림, 올림, 내림하는 JavaScript (0) | 2025.04.21 |