Xác thực Laravel độ dài tối đa tối thiểu

Hướng dẫn này sẽ trình bày cách xác thực số điện thoại của Hoa Kỳ và quốc tế bằng hai phương pháp khác nhau

  1. Lớp Trình điều khiển Laravel
  2. Regex hoặc biểu thức chính quy

Mỗi phương pháp đều có những ưu điểm và hạn chế riêng mà chúng ta sẽ khám phá rất chi tiết khi thực hiện từng phần của hướng dẫn này

Nếu bạn muốn tìm hiểu cách hoàn thành xác thực địa chỉ email bằng cách sử dụng PHP thay vì xác thực số điện thoại của Laravel, hãy xem bài viết này về cách xác thực địa chỉ email trong PHP.  

Hình ảnh bản đồ lịch sự của Bapt

Xác thực Laravel 5/6/7/8

Phương thức Xác thực Trình điều khiển mà chúng tôi sẽ trình bày trong hướng dẫn này sẽ hoạt động từ Laravel 5. 1 trở đi.  

Đối với Laravel 5. 0, khung không cung cấp sẵn lớp Trình điều khiển. Thay vào đó, Laravel đã cung cấp một lớp gọi là Trình xác thực. Nếu bạn vẫn đang sử dụng Laravel 5. 0, bạn có thể tìm hiểu thêm về lớp này từ tài liệu chính thức dành cho Laravel 5. 0.  

Laravel Mã xác thực số điện thoại ví dụ 1 - Bộ điều khiển

Phương thức Laravel Controller để xác thực là gì? . Ví dụ: một lớp PhoneController có thể xử lý tất cả các yêu cầu đến liên quan đến một số điện thoại, bao gồm hiển thị, tạo, cập nhật, xác thực và xóa số. Điều này hữu ích để thực hiện xác thực biểu mẫu trong ứng dụng Laravel của bạn, chẳng hạn như khi người dùng mới đang cố gắng đăng ký thông tin chi tiết của họ

Sử dụng lớp Trình điều khiển giúp bạn không phải xác định tất cả logic xử lý yêu cầu của mình trong một tuyến duy nhất. tập tin php. Điều này dẫn đến một cơ sở mã có cấu trúc và tổ chức hơn, dễ bảo trì hơn. Theo mặc định, Bộ điều khiển được lưu trữ trong thư mục app/Http/Controllers

Chúng tôi sẽ xem xét việc sử dụng lớp Trình điều khiển có thể xác thực thành công số điện thoại. Nhưng định dạng của những con số chúng ta đang sử dụng là gì? . Các số này có độ dài 10 chữ số khi bao gồm phần mở rộng, ví dụ:. 14151251234.  

Thiết lập tuyến đường của chúng tôi

Hãy bắt đầu viết lớp Controller của chúng ta. Hãy nhớ rằng Bộ điều khiển giúp chúng tôi không phải xử lý logic xác thực trong các tệp tuyến đường của chúng tôi. Tuy nhiên, chúng ta vẫn phải thêm một route vào lớp Controller của mình trong routes/web. php bằng lệnh sau


use App\Http\Controllers\PhoneController;
Route::post['/post', [PhoneController::class, save]];

Yêu cầu POST này sẽ được sử dụng khi người dùng gửi số của họ.  

Lớp PhoneController để từ chối số điện thoại không hợp lệ

Hãy tạo lớp PhoneController của chúng tôi. Lớp này sẽ hoạt động như một phần mở rộng trình xác thực cho lớp Trình điều khiển cơ sở. Kiểm tra mã dưới đây


namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class PhoneController extends Controller
{
  public function save[Request $request]
  {

    $validated = $request->validate[[
    'phone_number' => 'required|numeric|digits:10'
    ]];
    
    //If the number passes, the method will continue from here.
  }
}

Hãy chạy qua mã. Điều đầu tiên bạn sẽ nhận thấy là cách chức năng được gọi là lưu tương ứng với Tuyến đường mà chúng tôi thiết lập trong tuyến đường/web. php


Route::post['/post', [PhoneController::class, save]];

Xác thực số điện thoại Laravel

Hãy cùng xem một ví dụ xác thực và chính phương thức lưu để xem cách xử lý một số điện thoại trong Laravel


 public function save[Request $request]
   {
     $validated = $request->validate[[
     phone_number=> 'required|numeric|min:10'
     ]];

     //If number passes validation, method will continue here.
   }
 
 

Trong chức năng lưu của chúng tôi, chúng tôi sử dụng phương thức xác thực được cung cấp bởi đối tượng Illuminate\Http\Request. Khi một số được xác thực bằng phương pháp này, có thể xảy ra hai kết quả khác nhau

  • Nếu quy tắc xác thực vượt qua, mã của bạn sẽ tiếp tục thực thi bình thường
  • Nếu xác thực không thành công do số điện thoại không hợp lệ không tuân theo quy tắc mới của chúng tôi, một ngoại lệ Illuminate\Validation\ValidationException sẽ được đưa ra và phản hồi lỗi thích hợp sẽ tự động được gửi lại cho người dùng

Nếu xác thực không thành công trong yêu cầu HTTP truyền thống, phản hồi chuyển hướng tới URL trước đó sẽ được tạo. Nếu yêu cầu đến là yêu cầu XHR, phản hồi JSON chứa thông báo lỗi xác thực sẽ được trả về.  

Hãy tưởng tượng điều này sẽ trông như thế nào khi được sử dụng cho một số thứ như xác thực biểu mẫu. Người dùng sẽ nhập một số điện thoại không hợp lệ vào biểu mẫu và nhấn lưu và một thông báo lỗi sẽ được hiển thị thông qua giao diện người dùng thông báo cho người dùng rằng họ đã nhập một số không chính xác. Thông báo sẽ không được hiển thị ngay lập tức khi đầu vào bắt đầu, nhưng khi nhấn nút lưu.  

Phân tích quy tắc xác thực điện thoại

Chúng tôi đã cung cấp các quy tắc xác thực sau. 'yêu cầu. con số. tối thiểu. 10’. Nhưng mỗi trong số này có nghĩa là gì?

  • con số. Đầu vào phải là số, tức là. một số. Kiểm tra tài liệu này để biết những gì HP coi là số.  
  • tối thiểu. 10. Trường này phải dài ít nhất 10 ký tự
  • yêu cầu. Trường được xác thực phải có trong dữ liệu đầu vào và không trống

Một trường được coi là "trống" nếu một trong các điều kiện sau là đúng

  • Giá trị là null
  • Giá trị là một chuỗi rỗng
  • Giá trị là một mảng trống hoặc đối tượng đếm được trống
  • Giá trị là một tệp đã tải lên không có đường dẫn

Được rồi, vì vậy người dùng phải nhập một giá trị số có độ dài 10 ký tự. So sánh số này với số của Hoa Kỳ mà chúng tôi đã hiển thị trước đó. 14151251234. PhoneController của chúng tôi sẽ đảm bảo số điện thoại người dùng nhập vào được xác thực chính xác.  

Tuy nhiên, nếu bạn không muốn tạo một lớp Controller riêng thì sao?. Điều gì sẽ xảy ra nếu bạn đã quen thuộc với Regex và muốn sử dụng mẫu Regex trong khuôn khổ Laravel để thêm xác thực số điện thoại vào ứng dụng của mình. Điều này là có thể, và trong phần tiếp theo, chúng tôi sẽ trình bày cách

Laravel Mã xác thực số điện thoại ví dụ 2 - Regex

Nếu bạn quyết định sử dụng Regex để xác thực số điện thoại, bạn sẽ không phải sử dụng quy tắc số và chữ số mà chúng tôi đã trình bày trước đây. Điều quan trọng cần lưu ý là với Regex, bạn có thể tìm thấy nhiều mẫu khác nhau phù hợp với trường hợp sử dụng của mình, không có câu trả lời nào được chấp nhận. Hãy triển khai một phương thức lưu đơn giản được thiết kế để lưu số điện thoại và sử dụng biểu thức chính quy để hoạt động như quy tắc xác thực của riêng chúng ta

Hãy xem mã sau và ví dụ xác thực nơi chúng tôi sử dụng một hàm có cùng tên với ví dụ cuối cùng của chúng tôi, hãy lưu lại.  


public function save[Request $request]{
  $validated = $request->validate[$request,[
  'phone_number' => 'required|regex:/^[[0-9\s\-\+\[\]]*]$/|min:10'
  ]];
  //method continues here.
}

Hãy chia nhỏ các quy tắc mà chúng tôi đã áp dụng cho đầu vào phone_number của mình

  • yêu cầu. quy tắc này hợp lệ đối với null, chuỗi trống, mảng trống hoặc tệp đã tải lên không có đường dẫn.  
  • biểu thức chính quy. /^[[0-9\s\-\+\[\]]*]$/
  • Mẫu biểu thức chính quy này chấp nhận số 0-9 và các ký tự bổ sung của '-','+','[', và ']'. Bất kỳ đầu vào nào không khớp với mẫu đã cho này sẽ bị từ chối.  
  • tối thiểu. 10. Đầu vào này phải dài ít nhất 10 ký tự. Bất kỳ đầu vào nào không tuân theo các quy tắc xác thực kích thước này sẽ bị từ chối.  

Đây là cách bạn có thể sử dụng Regex để xác thực số Hoa Kỳ. Nhưng còn định dạng quốc tế cho số điện thoại và số điện thoại di động thông thường thì sao?

Laravel xác thực số điện thoại quốc tế

Có rất nhiều định dạng số điện thoại hợp lệ khác nhau như bạn có thể thấy từ mục Wikipedia này về quy ước viết số điện thoại. Bạn có thể thấy số điện thoại di động cũng có thể khác với số điện thoại cố định. Định dạng số điện thoại có thể thay đổi đáng kể tùy thuộc vào mã quốc gia và phần mở rộng cho số đó. Trường số điện thoại di động có thể có độ dài khác với trường số điện thoại cố định. Xử lý tất cả các trường hợp khác nhau này có thể phức tạp.  

Hình ảnh máy tính xách tay lịch sự của Bapt

Hãy xem ví dụ về các số điện thoại ở Vương quốc Anh và so sánh nó với định dạng số ở Hoa Kỳ mà chúng tôi đã đề cập cho đến nay

  • Số điện thoại Hoa Kỳ - +1 213 621 0002
  • Số điện thoại Vương quốc Anh - +44 20 8759 9036

Số của Hoa Kỳ theo cấu trúc này

  • Có tiện ích mở rộng quốc tế +1
  • Chứa 9 chữ số theo mã quốc gia

Số của Vương quốc Anh tuân theo cấu trúc này

  • Có phần mở rộng quốc tế là +44
  • Chứa 10 chữ số theo mã quốc gia

Hãy xem ví dụ Regex trước đây của chúng tôi và cập nhật nó để nó có thể hoàn tất xác thực với mã quốc gia cho các số ở Vương quốc Anh

Bạn có thể sử dụng mẫu Regex sau để xác thực số ở Vương quốc Anh


^[[[\+44\s?\d{4}|\[?0\d{4}\]?]\s?\d{3}\s?\d{3}]|[[\+44\s?\d{3}|\[?0\d{3}\]?]\s?\d{3}\s?\d{4}]|[[\+44\s?\d{2}|\[?0\d{2}\]?]\s?\d{4}\s?\d{4}]][\s?\#[\d{4}|\d{3}]]?$

Điều gì sẽ xảy ra nếu bạn không muốn sử dụng phương thức Trình điều khiển có sẵn của Laravel hoặc Regex để thực hiện xác thực số điện thoại của mình? .  

Các phương pháp thay thế để xác thực số điện thoại

Có một số lựa chọn thay thế cho các phương pháp chúng ta đã thảo luận cho đến nay. Một phương pháp như vậy là sử dụng một thư viện

Làm cách nào để xác thực độ dài mảng trong Laravel?

Một trong những điều thú vị của các quy tắc xác thực của Laravel là bạn có thể áp dụng các quy tắc nhất định cho các loại dữ liệu khác nhau. Khi kiểm tra kích thước tối thiểu và tối đa của một mảng, bạn có thể sử dụng các quy tắc kích thước tối thiểu , tối đa , giữa và kích thước mà bạn cũng có thể áp dụng cho các chuỗi .

Làm cách nào để xác thực phần mở rộng tệp trong Laravel?

Làm cách nào để xác thực tệp CSV trong Laravel? .
Kiểm tra xem loại MIME hoặc phần mở rộng tệp có phù hợp với nhu cầu của bạn không
Kiểm tra xem tệp đã tải lên có được định dạng ở định dạng CSV không
Kiểm tra xem cấu trúc tệp CSV của tệp đã tải lên có phù hợp với nhu cầu của bạn không

Làm cách nào để xác thực số trong Laravel?

Xác thực số điện thoại Laravel . con số. tối thiểu. 10' ]]; public function save[Request $request] { $validated = $request->validate[[ phone_number=> 'required|numeric|min:10' ]]; //Nếu số vượt qua xác thực, phương thức sẽ tiếp tục ở đây. } Trong chức năng lưu của chúng tôi, chúng tôi sử dụng phương thức xác thực được cung cấp bởi đối tượng Illuminate\Http\Request.

Chủ Đề