PHP - Form Email/URL

PHP cung cấp hai phương pháp thay thế để xác thực các mục dữ liệu biểu mẫu là chuỗi nhưng được kỳ vọng là một đại diện của ID email hoặc URL. Một cách để kiểm tra xem phần tử biểu mẫu có chứa email/URL hay không là sử dụng RegEx (regular expressions) , và cách khác, thuận tiện hơn là sử dụng hàm filter_var(). Hãy áp dụng cả hai phương pháp này và xác thực email và URL được gửi bởi một biểu mẫu đến một tập lệnh PHP.

Mẫu HTML được sử dụng cho chương này như sau −

<h1>Email and URL Validation</h1>
<form action="hello.php" method="POST">
   <p><label for="email">Enter your email:</label>
   <input type="text" id="email" name="email"></p>
   <p><label for="URL">Enter your website<label>
   <input type = "text" id="URL" name="url"></p>
   <input type="submit">
</form>

Validation with Regex

Thư viện hàm tích hợp sẵn của PHP bao gồm preg_match() function thực hiện một phép so khớp biểu thức chính quy.

preg_match(
   string $pattern,
   string $subject,
   array &$matches = null,
   int $flags = 0,
   int $offset = 0
): int|false

Hàm này tìm kiếm chủ đề để tìm một sự phù hợp với biểu thức chính quy được đưa ra trong mẫu. preg_match() trả về 1 nếu mẫu khớp với chủ đề đã cho, 0 nếu không khớp, hoặc false nếu có lỗi.

Một ID email hợp lệ nên thỏa mãn biểu thức chính quy sau −

"/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"

Tương tự, một URL hợp lệ nên thỏa mãn biểu thức chính quy sau −

"/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i"

Hàm sau đây trả về "1" hoặc "0" nếu chuỗi là một ID email hợp lệ.

function checkemail($str) {
   return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}

Example

Hãy sử dụng checkmail() function để kiểm tra xem trường email trong HTML ở trên có hợp lệ hay không, với sự trợ giúp của mã PHP sau:

<?php         
   function checkemail($str) {
      return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@
         ([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
   }
   if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $email = $_POST['email'];
      if(!checkemail($email)){
         echo "Invalid email address.";
      } else {
         echo "Valid email address.";
      }
   }
?>

Biểu mẫu HTML được hiển thị như sau −

PHP Form Email URl

Kiểm tra mã PHP bằng cách nhập chuỗi email hợp lệ/không hợp lệ vào trường email.

Đoạn sau checkURL() function kiểm tra xem một chuỗi có đại diện cho một URL hợp lệ hay không, và trả về "1" hoặc "0".

function checkURL($str) {
   return (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)
      [-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $str)) ? FALSE : TRUE;
}

Example

Trường URL được trích xuất từ mảng $_POST được truyền làm tham số cho hàm trên.

<?php         
   function checkURL($str) {
      return (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]
         *[-a-z0-9+&@#\/%=~_|]/i", $str)) ? FALSE : TRUE;
   }
   if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $url = $_POST['url'];
      if(!checkURL($url)){
         echo "Invalid URL.";
      } else {
         echo "Valid URL.";
      }
   }
?>

Bạn có thể kiểm tra đoạn mã trên bằng cách nhập chuỗi URL vào trường URL của biểu mẫu ở trên.

Using filter_var() function

Hàm filter_var() tích hợp sẵn lọc một biến với một bộ lọc được chỉ định.

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed

Tùy thuộc vào ID bộ lọc được liệt kê như giá trị của tham số $filter , tham số $value được kiểm tra và hàm trả về dữ liệu đã lọc, hoặc false nếu bộ lọc không thành công.

Có nhiều predefined filter ID constants có sẵn −

Sr.No ID & Description
1 FILTER_VALIDATE_BOOL Returns true for "1", "true", "on" and "yes". Returns false otherwise.
2 FILTER_VALIDATE_DOMAIN Validates whether the domain name label lengths are valid.
3 FILTER_VALIDATE_EMAIL Validates whether the value is a valid e-mail address.
4 FILTER_VALIDATE_IP Validates value as IP address
5 FILTER_VALIDATE_URL Validates value as URL

Example

Đoạn mã PHP dưới đây xác thực dữ liệu email và URL được gửi từ HTML ở trên −

<?php
   if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $email = $_POST['email'];
      $url = $_POST['url'];

      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
         echo "Invalid email format and please re-enter valid email\n"; 
      }
      else
      echo "Email entered is in valid format\n";

      if (!filter_var($url, FILTER_VALIDATE_URL)) {
         echo "Invalid URL format and please re-enter valid URL\n"; 
      }
      else
      echo "URL entered is in valid format\n";
   }
?>

Bạn có thể kiểm tra hiệu suất của đoạn mã trên bằng cách nhập email/URL hợp lệ/không hợp lệ.