Regex cho ngày giờ ISO 8601

Dùng /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/ để kiểm tra xem toàn bộ chuỗi có phải là ngày giờ ISO 8601 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 dữ liệu mẫu.

Cập nhật

/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/
Mở trong Regex Tester
Đầu vàoKết quả
2026-10-30T14:30:00Z✓ Khớp
2026-10-30T14:30:00.123+05:30✓ Khớp
2026-10-30T14:30Z✓ Khớp
2026-10-30 14:30:00✗ Không khớp
2026-10-30T14:30:00✗ Không khớp
2026-10-30T14:30:00+0530✗ Không khớp

Cách hoạt động của mẫu

PhầnÝ nghĩa
\d{4}-\d{2}-\d{2}Phần ngày tháng
TKý tự phân cách T cố định
\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?Giờ và phút, tùy chọn thêm giây và phần thập phân
(?:Z|[+-]\d{2}:\d{2})Z cho UTC, hoặc độ lệch múi giờ như +05:30

Ví dụ code

JavaScript

const re = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})', value))

PHP

preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/', $value) === 1;

Ghi chú và giới hạn

Mẫu này yêu cầu có múi giờ, giúp tránh các mốc thời gian gây nhầm lẫn. new Date().toISOString() trong JavaScript luôn tạo ra chuỗi khớp với mẫu. Bạn có thể chuyển đổi mốc thời gian bằng Unix Timestamp Converter.

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

Regex cho ngày giờ ISO 8601 là gì?
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/ — mẫu này khớp với toàn bộ chuỗi. Xem bảng ở 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 chuỗi khớp là: 2026-10-30T14:30:00Z, 2026-10-30T14:30:00.123+05:30 và 2026-10-30T14:30Z. 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, đồng thời các phần khớp sẽ được tô sáng khi bạn chỉnh sửa.