Trang

Thứ Năm, 18 tháng 7, 2013

Zend_Validate [Zend Framework]

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
$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

1 nhận xét: