Zend Framework hỗ trợ chúng ta lớp Zend_Validate (kiểm tra hợp lệ)
để xử lý dữ liệu trước khi hiển thị ra màn hình hoặc trước khi lưu dữ
liệu vào cơ sở dữ liệu...
1. Kiểm tra chuỗi chỉ gồm chữ và số
- Không có khoảng trắng trong chuỗi
- Cho phép khoảng trắng trong chuỗi
Mặc định Zend_Validate_Alnum quy ước kí tự trắng là không hợp lệ, để hợp lệ kí tự này ta chỉnh sửa lại như sau:
Ví dụ:
- Không cho phép khoảng trắng:
- Cho phép kí tự trắng
2. Kiểm tra chuỗi toàn kí tự chữ
- Không khoảng trắng
Ví dụ
- Không cho phép có khoảng trắng
- Cho phép có khoảng trắng
3. Kiểm tra dữ liệu số:
Ghi chú:
Zend_Validate_Digits không hỗ trợ nhận dạng số nguyên có dấu phân cách, ví dụ 1.000.000 là không hợp lệ. Để Zend nhận dạng được kí tự phân cách, thông thường ta dùng Zend_Validate_Int . Tuy nhiên mỗi quốc gia có một kí tự phân tách riêng, để chính xác chúng ta cần chỉ định locale
Ví dụ
Đối với kiểm tra số thực ta dùng Zend_Validate_Float, và chúng ta cũng nên đặt locale để kiểm tra chính xác vì mỗi quốc gia có cách định dạng phần lẻ khác nhau.
4. Kiểm tra giá trị nằm trong khoảng/đoạn
- Tính luôn hai đầu mút (trong đoạn)
- Không tính hai đầu mút (trong khoảng)
Ví dụ
- Tính luôn hai đầu mút
- Không tính hai đầu mút
5. Kiểm tra email hợp lệ
Ví dụ
6. Kiểm tra notEmpty
7. Kiểm tra độ dài chuỗi
Nếu chúng ta không xác định giới hạn thì mặc định min là 0 và max là không giới hạn
- Giới hạn dưới và không giới hạn trên
- Giới hạn trên và dưới là 0
- Giới hạn cả max và min
Ví dụ
Giới hạn trên và dưới là 0
Giới hạn dưới và không giới hạn trên
Giới hạn cả max và min
8. Kiểm tra phù hợp với một regular expression
Ví dụ
Regex xác định có kí tự đặc biêt:
Ví dụ:
Cho phép các kí tự đặc biệt thành hợp lệ
Regex chỉ cho phép nhập chữ và số
Cho phép nhập các kí tự đặc biêt.
Regex email:
9. Callback - Tự viết hàm kiểm tra
Để làm được việc này chúng ta cần thực hiện 2 việc: Tạo thư viện hàm riêng, gọi hàm kiểm tra và đưa ra các xử lý.
a. Tạo thư viện hàm riêng
Thư viện của Zend rất lớn và được cập nhật liên tục, vì thế thư viện riêng của chúng ta nên để riêng biệt với thư viện Zend
Bước 1: Vào thư mục library tạo một thư mục Me
Bước 2: Mở file application.ini thêm dòng sau
Bước 3: Trong thư mục Me ta viết class để validate
Giả sử ta kiểm tra số nhập vào có phải số chẵn hay không?
b. Gọi hàm kiểm tra và đưa ra các xử lý
Trong Controller ta viết như sau:
- Không có khoảng trắng trong chuỗi
$str = "giá_trị"; $val = new Zend_Validate_Alnum; if( $val->isValid($str) ) { // true }else{ //false }
- Cho phép khoảng trắng trong chuỗi
Mặc định Zend_Validate_Alnum quy ước kí tự trắng là không hợp lệ, để hợp lệ kí tự này ta chỉnh sửa lại như sau:
$val = new Zend_Validate_Alnum(array('allowWhiteSpace'=>true));
Ví dụ:
- Không cho phép khoảng trắng:
$validator = new Zend_Validate_Alnum(); if ($validator->isValid('Abcd12')) { // value contains only allowed chars } else { // false }
- Cho phép kí tự trắng
$validator = new Zend_Validate_Alnum(array('allowWhiteSpace' => true)); if ($validator->isValid('Abcd and 12')) { // value contains only allowed chars } else { // false }
2. Kiểm tra chuỗi toàn kí tự chữ
- Không khoảng trắng
$str = "giá_trị "; $val = new Zend_Validate_Alpha; if( $val->isValid($str) ) { //true }else{ //false }- Cho phép có khoảng trắng
$val = new Zend_Validate_Alpha(array('allowWhiteSpace'=>true));
Ví dụ
- Không cho phép có khoảng trắng
$validator = new Zend_Validate_Alpha(); if ($validator->isValid('Abcd')) { // value contains only allowed chars } else { // false }
- Cho phép có khoảng trắng
$validator = new Zend_Validate_Alpha(array('allowWhiteSpace' => true)); if ($validator->isValid('Abcd and efg')) { // value contains only allowed chars } else { // false }
3. Kiểm tra dữ liệu số:
$str = "giá_trị"; $val = new Zend_Validate_Digits; if( $val->isValid($str) ) { //true }else{ //false }Ví dụ
$validator = new Zend_Validate_Digits(); $validator->isValid("1234567890"); // returns true $validator->isValid(1234); // returns true $validator->isValid('1a234'); // returns false
Ghi chú:
Zend_Validate_Digits không hỗ trợ nhận dạng số nguyên có dấu phân cách, ví dụ 1.000.000 là không hợp lệ. Để Zend nhận dạng được kí tự phân cách, thông thường ta dùng Zend_Validate_Int . Tuy nhiên mỗi quốc gia có một kí tự phân tách riêng, để chính xác chúng ta cần chỉ định locale
$val = new Zend_Validate_Int(array('locale'=>'giá_trị'));
Ví dụ
$val = new Zend_Validate_Int(array('locale'=>'vi_VN'));
Đối với kiểm tra số thực ta dùng Zend_Validate_Float, và chúng ta cũng nên đặt locale để kiểm tra chính xác vì mỗi quốc gia có cách định dạng phần lẻ khác nhau.
$val = new Zend_Validate_Float(array('locale'=>'vi_VN'));
4. Kiểm tra giá trị nằm trong khoảng/đoạn
- Tính luôn hai đầu mút (trong đoạn)
$str = "giá_trị"; $val = new Zend_Validate_Between(array('min'=>'giá_tri_min', 'max'=>'giá_tri_max')); if( $val->isValid($str) ) { //true }else{ //fall }
- Không tính hai đầu mút (trong khoảng)
$val = new Zend_Validate_Between(array('min'=>'giá_trị_min', 'max'=>'giá_trị_max', 'inclusive'=>false));
Ví dụ
- Tính luôn hai đầu mút
$valid = new Zend_Validate_Between(array('min' => 0, 'max' => 10)); $value = 10; $result = $valid->isValid($value); // returns true
- Không tính hai đầu mút
$valid = new Zend_Validate_Between( array( 'min' => 0, 'max' => 10, 'inclusive' => false ) ); $value = 10; $result = $valid->isValid($value); // returns false
5. Kiểm tra email hợp lệ
$email = "email"; $val = new Zend_Validate_EmailAddress; if( $val->isValid($email) ) { //true }else{ //false }
Ví dụ
$validator = new Zend_Validate_EmailAddress(); if ($validator->isValid($email)) { // email appears to be valid } else { // email is invalid; print the reasons foreach ($validator->getMessages() as $message) { echo $message."<br/>"; } }
6. Kiểm tra notEmpty
$valid = new Zend_Validate_NotEmpty(); $value = ''; $result = $valid->isValid($value); // returns false
7. Kiểm tra độ dài chuỗi
$val = new Zend_Validate_StringLength;
Nếu chúng ta không xác định giới hạn thì mặc định min là 0 và max là không giới hạn
- Giới hạn dưới và không giới hạn trên
$val = new Zend_Validate_StringLength(array('min'=>'giá_trị_min'));
- Giới hạn trên và dưới là 0
$val = new Zend_Validate_StringLength(array('max'=>'giá_trị_max'));
- Giới hạn cả max và min
$val = new Zend_Validate_StringLength(array('min'=>'giá_trị_min', 'max'=>'giá_trị_max'));
Ví dụ
Giới hạn trên và dưới là 0
$validator = new Zend_Validate_StringLength(array('max' => 6)); $validator->isValid("Test"); // returns true $validator->isValid("Testing"); // returns false
Giới hạn dưới và không giới hạn trên
$validator = new Zend_Validate_StringLength(array('min' => 5)); $validator->isValid("Test"); // returns false $validator->isValid("Testing"); // returns true
Giới hạn cả max và min
$validator = new Zend_Validate_StringLength(array('min' => 3, 'max' => 30)); $validator->isValid("."); // returns false $validator->isValid("Test"); // returns true $validator->isValid("Testing"); // returns true
8. Kiểm tra phù hợp với một regular expression
$val = new Zend_Validate_Regex(array('pattern'=>'một_regex'));
Ví dụ
$validator = new Zend_Validate_Regex(array('pattern' => '/^Test/'); $validator->isValid("Test"); // returns true $validator->isValid("Testing"); // returns true $validator->isValid("Pest"); // returns false
Regex xác định có kí tự đặc biêt:
$regex = "/(.*)[^a-zA-Z0-9](.*)/";
Tìm tất cả các kí tự, nếu có kí tự nào khác a-z, A-Z, 0-9 thì trả về TRUE, ngược lại trả về FALSE.Ví dụ:
$str="Zend"; $pattern="/(.*)[^a-zA-Z0-9](.*)/"; $val = new Zend_Validate_Regex(array('pattern' => $pattern) ); if( $val->isValid($str) ) { echo "Có kí tự đặc biệt"; }else{ echo "Không có kí tự đặc biệt"; }
Cho phép các kí tự đặc biệt thành hợp lệ
$regex = "/(.*)[^a-zA-Z0-9\_- +](.*)/";
Tìm tất cả các kí tự, nếu có kí tự nào khác a-z, A-Z, 0-9, "_" , "-" , " "(kí tự khoảng trắng) , "+" thì trả về TRUE, ngược lại trả về FALSE.Regex chỉ cho phép nhập chữ và số
$regex="/^[a-zA-Z0-9]*$/";Tìm tất cả các kí tự, nếu có kí tự nào khác a-z, A-Z, 0-9 thì trả về FALSE, ngược lại trả về TRUE.
Cho phép nhập các kí tự đặc biêt.
$regex="/^[a-zA-Z0-9\-+ ]*$/";
Regex email:
$regex = "/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+(\.[a-z]{2,3})+$/";Nếu đúng trả về TRUE (Email hợp lệ), ngược lại trả về FALSE (Email không hợp lệ)
9. Callback - Tự viết hàm kiểm tra
Để làm được việc này chúng ta cần thực hiện 2 việc: Tạo thư viện hàm riêng, gọi hàm kiểm tra và đưa ra các xử lý.
a. Tạo thư viện hàm riêng
Thư viện của Zend rất lớn và được cập nhật liên tục, vì thế thư viện riêng của chúng ta nên để riêng biệt với thư viện Zend
Bước 1: Vào thư mục library tạo một thư mục Me
Bước 2: Mở file application.ini thêm dòng sau
autoloadernamespaces.Me = "Me_"
Bước 3: Trong thư mục Me ta viết class để validate
<?php class Me_Tenfile{ // các hàm validate cần thiết } ?>
Giả sử ta kiểm tra số nhập vào có phải số chẵn hay không?
<?php class Me_Myvalid{ public function soChan($so) { if($so%2 ==0) return true; } } ?>
b. Gọi hàm kiểm tra và đưa ra các xử lý
Trong Controller ta viết như sau:
public function mycheckAction() { $check = new Me_Myvalid; $val = new Zend_Validate_Callback(array($check,'soChan')); if($val->isValid(3)) { echo "Đây là số chẵn"; // các xử lý }else{ echo "Không phải số chẵn"; // các xử lý } }
Nguồn: Sưu tầm Internet
Bài viết rất hay. Cảm ơn bạn rất nhiều
Trả lờiXóa