Khi nói đến xác thực ngày tháng, Laravel bao gồm hầu hết các trường hợp xác thực ngày tháng. Tất nhiên, đôi khi bạn sẽ cần cài đặt một số gói bổ sung để thực hiện xác thực cụ thể, nhưng nhìn chung, một loạt quy tắc xác thực gốc của Laravel là đủ. Trong bài viết này, tôi sẽ tổng quan về các trường hợp xác thực ngày phổ biến nhất
Mục lục
Làm cách nào để xác thực ngày trong Laravel?
Nếu bạn cần kiểm tra đầu vào cho một ngày hợp lệ thì bạn nên sử dụng trình xác nhận ngày
$request->validate[
'date_field' => 'date'
];
Nó có nghĩa là gì bởi "ngày hợp lệ"? . Trình xác thực này kiểm tra xem giá trị đã cho là một chuỗi hay số, sau đó chuyển giá trị đó tới hàm PHP strtotime[] và kiểm tra xem hàm này có thể phân tích giá trị thành dấu thời gian Unix hay không. Nếu kết quả của những lần kiểm tra này là dương thì trình xác thực sẽ phân tích giá trị bằng hàm PHP date_parse[] và kiểm tra xem giá trị được phân tích cú pháp có phải là ngày Gregorian hợp lệ hay không bằng cách sử dụng hàm PHP checkdate[]. Trong trường hợp giá trị đã cho là một phiên bản của trình xác thực DateTimeInterface [đối tượng DateTime hoặc DateTimeImmutable] sử dụng trả về sớm với kết quả xác thực dương
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
Làm cách nào để xác thực ngày giờ cụ thể trong Laravel?
Khi bạn cần xác thực trường đầu vào cho một ngày hoặc giờ cụ thể thì bạn nên sử dụng trình xác thực date_equals
$request->validate[
'date_field' => 'date_equals:11/30/2022'
];
Đây là một ví dụ với xác thực thời gian cụ thể
$request->validate[
'date_field' => 'date_equals:15:00'
];
Và một ví dụ nữa với ngày giờ cụ thể
$request->validate[
'date_field' => 'date_equals:11/30/2022 15:00'
];
Làm cách nào để xác thực phạm vi ngày trong Laravel?
Đôi khi, bạn cần kiểm tra giá trị đầu vào ngày cho một phạm vi ngày cụ thể hoặc để kiểm tra xem giá trị đầu vào có sau hay trước một ngày cụ thể hay không. Để làm điều đó, bạn có thể chỉ định ngày tối thiểu và tối đa với các trình xác thực Laravel này. trước, before_or_equals, sau, after_or_equals
Dưới đây là một ví dụ về xác thực ngày bằng cách sử dụng trình xác thực trước
$request->validate[
'date_field' => 'before:11/30/2022'
];
Và tất nhiên, bạn có thể chỉ định cả ngày và giờ
$request->validate[
'date_field' => 'before_or_equals:11/30/2022 15:00'
];
Hoặc chỉ là thời gian sẽ làm việc quá
$request->validate[
'date_field' => 'after:15:00'
];
Để xác thực phạm vi ngày, bạn có thể sử dụng cả trình xác thực before/before_or_equals và after/after_or_equals
________số 8$request->validate[
'date_field' => 'after_or_equals:11/01/2022|before_or_equals:11/30/2022'
];
Khi bạn có ba trường – trường đầu tiên dành cho ngày bắt đầu, trường thứ hai dành cho ngày kết thúc và bạn muốn kiểm tra xem giá trị đầu vào thứ ba có nằm trong khoảng từ ngày bắt đầu đến ngày kết thúc hay không, thì trong before/before_or_equals/after/ . Đây là một ví dụ
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
0Làm cách nào để xác thực định dạng ngày trong Laravel?
Nếu người dùng phải cung cấp ngày ở định dạng cụ thể thì bạn có thể xác thực ngày đó bằng cách sử dụng trình xác thực định dạng ngày
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
1Trình xác thực này hỗ trợ được hỗ trợ bởi phương thức createFromFormat[] của lớp DateTime của PHP
Bạn không nên sử dụng cùng với date_format vì cái thứ hai có kiểm tra ngày hợp lệ. Hãy xem nó hoạt động như thế nào
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
2Laravel cố gắng tạo một đối tượng DateTime từ một định dạng đã chỉ định. Nếu đối tượng DateTime được tạo thành công, thì trình xác thực sẽ so sánh đối tượng đó được định dạng theo định dạng đã chỉ định với giá trị đã cho. Nếu người dùng đã nhập ngày Gregorian không hợp lệ nhưng định dạng của nó giống như đã chỉ định, thì phương thức createFromFormat[] sẽ tạo một ngày khác được tính toán lại theo lịch Gregorian và sẽ không vượt qua bước kiểm tra này
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
3Làm cách nào để xác thực thời gian trong Laravel?
Để xác thực thời gian, bạn cũng nên sử dụng trình xác thực date_format và chỉ định bất kỳ định dạng thời gian nào bạn cần. Ví dụ
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
4Làm cách nào để xác thực thời gian ở định dạng AM/PM trong Laravel?
Định dạng AM hoặc PM được hỗ trợ bởi lớp DateTime của PHP, vì vậy bạn có thể dễ dàng xác thực nó bằng trình xác thực date_format
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
5Làm cách nào để vượt qua xác thực ngày nếu giá trị đầu vào là null trong Laravel?
Khi bạn cần chuyển xác thực dữ liệu nếu trường ngày trống và chỉ xác thực trường đó nếu người dùng đã nhập nội dung nào đó vào trường đó, thì bạn nên sử dụng trình xác thực nullable
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
6Làm cách nào để xác thực múi giờ trong Laravel?
Bạn có thể kiểm tra xem chuỗi đã cho có phải là múi giờ được PHP hỗ trợ hay không bằng cách sử dụng trình xác thực múi giờ. Trình xác thực này chỉ cần kiểm tra xem chuỗi đã cho có nằm trong mảng được trả về bởi hàm timezone_identifiers_list[] PHP không. Đây là một ví dụ
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
7Làm cách nào để xác thực dấu thời gian Unix trong Laravel?
Không có trình xác thực nào để xác thực dấu thời gian Unix trong Laravel. Nhưng chúng ta có thể nghĩ về loại dấu thời gian Unix thực sự là gì. Nó là một số nguyên không dấu. Để xác thực một số nguyên không dấu, chúng ta có thể kiểm tra xem một giá trị có phải là số nguyên không và liệu nó có lớn hơn 0 không. Vì vậy, chúng tôi có thể sử dụng trình xác thực số nguyên và tối thiểu
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
8Làm cách nào để xác thực ngày nếu nó có số phút cụ thể?
Đôi khi chúng ta cần kiểm tra xem ngày có phút cụ thể không. Ví dụ: chúng tôi có hai ngày. 2022-11-11 09. 15 và 2022-11-11 09. 30. Và chúng ta cần kiểm tra xem ngày có phút thứ 15 hay phút thứ 45. Vì vậy, trong trường hợp này, ngày đầu tiên sẽ hợp lệ và ngày thứ hai sẽ không hợp lệ. Để xác thực ngày theo cách này, bạn cần cài đặt gói vdhicts/laravel-validation-rules bằng lệnh Composer
public function validateDate[$attribute, $value]
{
if [$value instanceof DateTimeInterface] {
return true;
}
try {
if [[! is_string[$value] && ! is_numeric[$value]] || strtotime[$value] === false] {
return false;
}
} catch [Exception $e] {
return false;
}
$date = date_parse[$value];
return checkdate[$date['month'], $date['day'], $date['year']];
}
9Và sau đó sử dụng quy tắc xác thực DateHasSpecificMinutes. Định dạng ngày mặc định là Y-m-d H. i, vì vậy nếu ngày của bạn ở định dạng khác thì hãy chuyển nó làm đối số thứ hai. Dưới đây là các ví dụ
$request->validate[
'date_field' => 'date_equals:11/30/2022'
];
0Hoặc nếu bạn sử dụng không sử dụng định dạng ngày mặc định
$request->validate[
'date_field' => 'date_equals:11/30/2022'
];
1Làm cách nào để xác thực ngày theo tiêu chuẩn ISO 8601 trong Laravel?
Đó là ngày nào. 01/11/12? . Nó có thể là một vấn đề khi các hệ thống giao tiếp với nhau sử dụng các định dạng ngày khác nhau. Đó là lý do tiêu chuẩn ISO 8601 ra đời
Để xác thực ngày theo tiêu chuẩn ISO 8601, bạn có thể sử dụng gói penance316/laravel-iso8601-validator. Để cài đặt nó chạy lệnh Composer
$request->validate[
'date_field' => 'date_equals:11/30/2022'
];
2Sau đó, bạn nên thêm trình xác thực cần thiết vào phương thức khởi động của ứng dụng/Nhà cung cấp/AppServiceProvider. php