Hướng dẫn how to validate time in php - cách xác nhận thời gian trong php

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""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 assertion

preg_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:

  1. Nếu chuỗi
    preg_match("/^(?:2[0-3]|[01][0-9]|[0-9]):[0-5][0-9]$/", $time)
    
    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ẫu
    preg_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ợp "09:45")
  2. Nếu không, hãy sử dụng mẫu
    preg_match("/^(?:2[0-3]|[01][0-9]|[0-9]):[0-5][0-9]$/", $time)
    
    7 để phù hợp với ký hiệu H-giờ (trường hợp "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:

 24 ||$bits[1] > 59|| ($bits[0] == 24 && $bits[1] > 0) || count($bits) != 2 || !is_numeric($bits[0]) || !is_numeric($bits[1])){
return "false";
}
return "true";
}

function check_time($time) {
if(preg_match("/^(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23):[0-5][0-9]$/", $time)) {
	return "true";
} else {
	return "false";
}
}

echo "validateMilTime
"; foreach($times as $t) { echo $t . " = " . validateMilTime($t) . '
'; } echo "check_time
"; foreach($times as $t) { echo $t . " = " . check_time($t) . '
'; } ?>

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

$ date = '2012-01-01 12:12:12';date = '2012-01-01 12:12:12';
$ r = RealityAdateFormat ($ ngày);r = validateDateFormat($date);
var_dump ($ r);$r);
/**
* Định dạng ngày (hoặc ngày tháng) xác thực
* @param $ ngày
* @param chuỗi $ Định dạng
* @return Bool
*/
functionValidatedateFormat ($ date, $ format = 'y-m-d h: i: s') validateDateFormat($date,$format='Y-m-d H:i:s')
{
$ dt = datetime :: createdFromFormat ($ format, $ date);dt = DateTime::createFromFormat($format, $date);
trả về $ dt! == false &&! mảng_sum ($ dt-> getLasterrors ()); $dt !== false && !array_sum($dt->getLastErrors());
}
?>

Làm thế nào thời gian kiểm tra là hợp lệ hay không trong PHP?

Bạn có thể làm: Nếu (preg_match ('/^(?: [01] [0-9] | 2 [0-3]): [0-5] [0-9] $/', $ input)) {// $ input là định dạng HH: mm hợp lệ.} Điều này sẽ cho phép 24:59.Đó không phải là thời gian hợp lệ.if(preg_match('/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/',$input)) { // $input is valid HH:MM format. } This would allow 24:59. That's not a valid time.

Làm thế nào để xác thực ngày trong PHP?

Hàm kiểm tra () được sử dụng để xác nhận ngày Gregorian.checkdate() function is used to validate a Gregorian date.