Programing/javascript

날짜 형식 유효성 검사 함수

2025. 4. 22. 08:04
반응형

날짜 입력값은 다양한 형식으로 존재할 수 있으며, 단순한 문자열 검사만으로는 실제 존재하지 않는 날짜까지 통과될 수 있습니다. 이를 방지하기 위해, 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
'Programing/javascript' 카테고리의 다른 글
  • 생년월일 유효성 검사 함수
  • 날짜 범위 형식 유효성 검사 함수
  • URL 형식 유효성 검사 함수
  • 휴대폰 번호 유효성 검사 JavaScript
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    SQL
    자바스크립트유틸
    IT블로그
    위시리스트
    iT's MY LiFE
    JavaScript
    It
    사고 싶은 책
    jsp
    IT 관련
    디자인패턴
    Java
    블로그
    자바
    IT·컴퓨터
    php
    자바스크립트
    기초
    js패턴
    읽고 싶은 책
Dongkkase
날짜 형식 유효성 검사 함수
상단으로

티스토리툴바