Regex kiểm tra ngày (YYYY-MM-DD)

Dùng /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/ để kiểm tra toàn bộ chuỗi có phải là ngày (YYYY-MM-DD) hợp lệ hay không. Mọi ví dụ bên dưới đều đã được kiểm thử với mẫu này, và bạn có thể mở chúng trong Regex Tester với sẵn các mẫu thử.

Cập nhật

/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/
Mở trong Regex Tester
Đầu vàoKết quả
2026-10-30✓ Khớp
1999-01-01✓ Khớp
2024-02-29✓ Khớp
2026-13-01✗ Không khớp
2026-1-5✗ Không khớp
2026/10/30✗ Không khớp
26-10-30✗ Không khớp
2026-00-10✗ Không khớp

Mẫu hoạt động như thế nào

PhầnÝ nghĩa
^\d{4}Năm gồm bốn chữ số
(?:0[1-9]|1[0-2])Tháng từ 01–12
(?:0[1-9]|[12]\d|3[01])Ngày từ 01–31
-Dấu gạch ngang cố định giữa các phần

Ví dụ code

JavaScript

const re = /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])', value))

PHP

preg_match('/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/', $value) === 1;

Ghi chú và giới hạn

Regex chỉ kiểm tra được định dạng chứ không kiểm tra được lịch: 2026-02-30 vẫn vượt qua. Sau khi khớp, hãy xác nhận bằng thư viện xử lý ngày hoặc new Date(value) rồi so sánh từng phần. Đây là định dạng ISO 8601 được <input type="date"> sử dụng.

Câu hỏi thường gặp

Regex cho ngày (YYYY-MM-DD) là gì?
/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/ — khớp với toàn bộ chuỗi. Xem bảng phía trên để biết mỗi phần làm gì.
Những ví dụ nào khớp?
Trong các ví dụ đã kiểm thử, những ví dụ khớp là: 2026-10-30, 1999-01-01, 2024-02-29. Các ví dụ còn lại không khớp.
Làm sao để kiểm thử regex này?
Nhấn “Mở trong Regex Tester” — mẫu, cờ và văn bản mẫu sẽ tự động được nạp, và kết quả khớp sẽ được tô sáng khi bạn chỉnh sửa.