Dựa trên câu trả lời thanh lịch của Charles với biểu thức chính quy. Nếu bạn cần xác thực một dòng của cả "HH:MM"
và "H:MM"
[tức là ________ 7/________ 8] sử dụng RegEXP sau để phù hợp với định dạng 24 giờ:
preg_match["/^[?[?=\d{2}][?:2[0-3]|[01][0-9]]|[0-9]]:[0-5][0-9]$/", $time]
Giải trình
[?
là viết tắt của Subpotyal có điều kiện, cú pháp là:
[? [Điều kiện] Có mẫu | Không có mẫu]]condition]yes-pattern|no-pattern]
preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
0 trong điều kiện là xác nhận RegEXPcondition is the regexp assertionpreg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
1 trong có mô hình là tùy chọn để có hiệu suất tốt hơn và bạn có thể bỏ nó. Điều này có nghĩa là chúng tôi không cần bất kỳ sự bắt giữ nào trong ngoặc đơn preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
2, chúng tôi chỉ cần tính năng thay thế.yes-pattern is optional for better performance and you may drop it. This means we don't need any capturing within parentheses preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
2, we need
just alternatives feature.Vì vậy, chúng tôi chỉ mô tả những điều sau đây:
- Nếu chuỗi
3 bắt đầu bằng hai chữ sốpreg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
4, hãy sử dụng mẫupreg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
5 để khớp với ký hiệu HH giờ [trường hợppreg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
"09:45"
] - Nếu không, hãy sử dụng mẫu
7 để phù hợp với ký hiệu H-giờ [trường hợppreg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
"9:45"
]
CẬP NHẬT
Như họ nói, sự đơn giản là em gái của một tài năng. Chúng tôi không nhất thiết cần các mẫu điều kiện được mô tả ở trên. Xác thực đơn giản hơn của
preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
9 cho định dạng 24 giờ:24-hour format:preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
Một lần nữa,
preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
1 trong nhóm dấu ngoặc đơn preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
2 là tùy chọn để vô hiệu hóa việc bắt giữ, bạn có thể bỏ nó.Vì vậy, trong RegEXP này, các bản phân từ thay thế với
preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
2 đang cố gắng khớp hai giờ ở mẫu đầu tiên [preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
3] và thứ hai [preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
4], sau đó một chữ số ở phần ba cuối cùng [preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
5].Ngoài ra, việc xác nhận
preg_match["/^[?:2[0-3]|[01][0-9]|[0-9]]:[0-5][0-9]$/", $time]
9 cho định dạng 12 giờ:12-hour format:preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
Ở đây, chúng tôi đang cố gắng kết hợp ở một chữ số đầu tiên [
preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
7] với số không có thể có [preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
8], và sau đó là hai chữ số [preg_match["/^[?:0?[1-9]|1[012]]:[0-5][0-9]$/", $time];
9]. Một giải pháp Regex đầy đủ rất có thể sẽ cung cấp cho bạn giải pháp tốt nhất mà không cần rất nhiều bài kiểm tra riêng lẻ. Cũng như phiên bản của Mikesta707, có nhiều cách để làm hỏng nó nếu đó là những gì bạn đang cố gắng làm.
Cảm hứng nhận ra một cách đơn giản để mã hóa Regex, đưa ra một regex dài, nhưng giữ cho nó đơn giản, tôi không chắc nó có hoàn hảo không, nhưng dường như giải quyết mọi thứ một cách chính xác ...
CODE:
OUTPUT:
validateMilTime 00:00 = true 1:10 = true 31:10 = false 25:10 = false 24:00 = true 23:60 = false 23:28 = true 2:1 = true 4:10 = true -12:00 = true 4:-3 = true .2:00 = true 12:.343434 = true check_time 00:00 = true 1:10 = false 31:10 = false 25:10 = false 24:00 = false 23:60 = false 23:28 = true 2:1 = false 4:10 = false -12:00 = false 4:-3 = false .2:00 = false 12:.343434 = false
Đừng nghĩ rằng tôi đã thay đổi bất kỳ tên biến nào lần này & nbsp; :-\
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
Chủ Đề |