Chào mọi người,
Mùa Covid này (và cả trước đó) anh em làm toàn phải tham gia hỏi - đáp những cái hoặc quá ABC hoặc quá cao siêu về giải thuật hoặc các công nghệ mới rất ghê, rồi nào là AI các kiểu… có vẻ là mệt mỏi rồi.
Giờ đây, khi lọc dữ liệu để kiểm tra mình mới kinh hoàng nhận ra hoá ra là có những thứ tưởng chừng đơn giản, dễ giải quyết nhưng nếu không chú trọng ngay từ đầu lại tiềm ẩn bug có nguy cơ làm cho mớ dữ liệu trở thành đống rác. Bật mí luôn: liên quan đến việc kiểm tra ngày tháng mà nếu không thực hiện ở phía server khi làm web, chỉ dựa vào client là… toang.
Chúng ta thử cùng tham gia giải quyết vấn đề này mà không dùng đến việc tra cứu StackOverflow/ GitHub/ thư viện/ framework. Tất nhiên các bạn được phép tra cứu tài liệu về JavaScript để xem nó trang bị những gì.
Cụ thể luôn thử thách này như sau:
Dùng JavaScript viết một hàm để kiểm tra ngày tháng (nhập vào theo định dạng Việt Nam dd-mm-yyyy) có hợp lệ hay không.
Để tránh phức tạp vấn đề, chúng ta chỉ nhập ngày tháng từ 01-01-1900 cho đến hiện tại mà không có những ngày tháng quá xa xăm về quá khứ/ tương lai. Ngày tháng hợp lệ theo dương lịch Gregorian đang dùng phổ biến trên thế giới. Code phải chạy đúng cho các trình duyệt Google Chrome, Apple Safari, Mozilla Firefox.
Hy vọng tìm được các lời giải có code ngắn gọn, bao phủ được hầu hết trường hợp.
Mình có đoạn code bên dưới từng viết khá lâu để nhập dữ liệu sinh viên, mới cách đây mấy ngày nhận thấy nó không xài được, bỏ lọt lưới nhiều ngày không tồn tại trên lịch.
function myDateValid(dateStrVn) {
let sections = dateStrVn.split('-');
let testDateString = sections[2] + '-' + sections[1] + '-' + sections[0]);
let myDate = Date.parse(testDateString);
if (isNaN(myDate)) {
return false;
}
return true;
}
Code của các bạn “game thủ” tham gia thử thách này được đưa tạm lên ĐÂY .
Mình test thử vài mẫu rồi ghi kết quả bên dưới mỗi bài để xem liệu có trường hợp mẫu test nào “lọt lưới” hoặc bị “giết nhầm”?
[Nảy sinh 1 vấn đề, anh em nào hứng thú tham gia giải quyết: 1 ứng dụng để có thể tổ chức các thử thách như này dễ dàng hơn. Ứng dụng đó có thể đáp ứng được yêu cầu là người tham gia đăng bài dự thi lên, có thể chạy được code để xem kết quả, có giám khảo chấm, và có phần cho khán giả tham gia bình luận]
Đọc cái này mới thấy cán bộ mà dốt thì khổ dân.