Thứ Sáu, 20 tháng 9, 2013

Kiểm tra tính hợp lệ của e-mail với PHP

Posted by Unknown Thứ Sáu, tháng 9 20, 2013, under | 1 comment

      Kiểm tra tính hợp lệ của các biểu mẫu là yếu tố rất quan trọng trong việc lập trình web. Trong bài này, tôi muốn giới thiệu đến các bạn cách dùng Regular Expression (RE) trong PHP để kiểm tra người dùng có nhập một địa chỉ e-mail hợp lệ hay không.
Trong PHP, tập hàm RE được chia làm 2 loại: 
- Hàm ereg: Cú pháp biểu thức chứa qui tắc chuẩn của PHP.
- Các hàm preg: Cú pháp biểu thức chứa qui tắc tương thích với perl.
Thực hành:
      Như các bạn đã biết, địa chỉ e-mail có dạng: username@domain.extension, ví dụ hameo87@gmail.com. Với một địa chỉ e-mail, thông thường có một phần mở rộng, ta sẽ viết:
eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9-] +\.[a-zA-Z.]{2,5}$', $email)
Tách ví dụ thành 3 phần nhỏ để dễ hiểu hơn:
- ^[a-zA-Z0-9._-]+@: Phần này có nhiệm vụ kiểm tra phần username của e-mail. Dấu mũ “^” ở đầu báo hiệu nơi bắt đầu chuỗi, nếu thiếu nó, người dùng có thể gõ bất kỳ thứ gì trước địa chỉ e-mail. Những ký tự trong dấu ngoặc vuông là những ký tự cho phép. Ta chấp nhận các chữ cái thường và hoa từ A đến Z, các chữ số từ 0 đến 9 và dấu chấm “.”, dấu gạch dưới “_”, dấu gạch trên “-”. Dấu cộng “+” ký tự “@”, sau ngoặc vuông đòi hỏi phải có một hoặc nhiều hơn một ký tự thuộc phạm vi cho phép trong dấu ngoặc vuông, vì vậy người dùng bắt buộc phải nhập phần username trong địa chỉ e-mail. Việc giới hạn số ký tự, ta sẽ xét ở phần sau. Cuối cùng, chữ @ cũng là chữ @ bình thường trong địa chỉ e-mail.
- [a-zA-Z0-9._-]+\.: Phần này cũng tương tự như kiểm tra username, và dấu cộng sau ngoặc buộc người dùng phải nhập tên miền của địa chỉ e-mail, ở cuối là một dấu “\” trước dấu “.” báo cho biểu thức rằng có một dấu chấm được yêu cầu tại vị trí này. Ý nghĩa của dấu “\” để thông báo đây là ký tự bình thường để tránh hiểu nhầm với ký tự “.” đứng một mình, sẽ được hiểu như một ký tự điều khiển cho biết tại vị trí đó có thể nhập ký tự bất kỳ.
- [a-zA-Z]{2,4}$: Phần này để kiểm tra phần mở rộng là phần cuối của biểu thức. Chúng ta chỉ cho phép các ký tự hoa, thường từ “A” đến “Z” thay vì dùng dấu cộng, ta dùng ngay {2,4} sau ngoặc vuông để qui định số ký tự tối thiểu và tối đa cho tên miền là 2 và 4 ( VD: vn, net, org ...). Cuối cùng kýá tự $ có nghĩa là kết thúc chuỗi, người dùng không thể nhập thêm gì phía sau tên miền.
     Như vậy là bạn đã biết cách kiểm tra biểu thức e-mail rồi nhé, với loại e-mail có tên miền cấp II (VD: abcd@pmail.vnn.vn ), bạn cũng làm tương tự.
Một số số ký hiệu khác trong cú pháp cơ bản:
?: Yêu cầu 0 hoặc 1 ký tự đứng trước.
*: Yêu cầu 0 hoặc nhiều ký tự đứng trước.
+: Yêu cầu 1 hoặc nhiều ký tự đứng trước.
{a}: Yêu cầu a kýá tự đứng trước.
{a,b}: Yêu cầu từ a đến b ký tự đứng trước.
{a,}: Yêu cầu lớn hơn hoặc bằng a ký tự đứng trước.
. : Bất kỳ ký tự nào. 
(a|b): a hoặc b. 
\s: Xóa sạch khoảng trắng.

1. VD1: 

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Học PHP - Regular Expression: Viết biểu thức Reg kiểm tra Địa chỉ email hợp lệ</title>
</head>
<body>
<?php
if($_POST){
$string = $_POST['email'];
$pattern = '#^[a-z][a-z0-9\._]{2,31}@[a-z0-9\-]{3,}(\.[a-z]{2,4}){1,2}$#';
if(preg_match($pattern, $string, $match) == 1){
$report = '<span style=\'color:#298426\'>Bạn vừa nhập vào một địa chỉ Email hợp lệ!</span>';
}
else{
$report = '<span style=\'color:#FF0400\'>Bạn vừa nhập vào một địa chỉ Email không hợp lệ!</span>';
}
}







Xem Nhiều

Bài đăng phổ biến

Lưu trữ blog

Blog Archive