ThinkPHP 自動驗證明例

//array(驗證字段1,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]),
protected $_validate = array(
);
php

ThinkPHP 自動驗證定義的附加規則以下:html

  1. regex:使用正則進行驗證(默認)
  2. unique:驗證惟一性
  3. confirm:驗證表單中的兩個字段是否相同
  4. equal:驗證是否等於某個值
  5. in:驗證是否在某個範圍內
  6. function:使用函數驗證
  7. callback:使用方法驗證

自動驗證例子

各類自動驗證參考例子以下:正則表達式

// 默認狀況下用正則進行驗證
array('title','require','標題不能爲空。'),
array('order','number','排序必須是數字。',2),
array('email','email','郵箱格式不符合要求。'),
array('qq','qq','QQ號碼不正確。'),

// 在新增的時候驗證標題title字段是否惟一
array('title','','標題已經存在!',0,'unique',1), 

// 驗證確認密碼是否和密碼一致
array('repassword','password','確認密碼不正確。',0,'confirm'), 

// 驗證class填寫的值爲 一班
array('class','一班','班級必須填寫一班。',0,'equal'), 

// 當值不爲空的時候判斷是否在一個範圍內
array('value',array(1,2,3),'值的範圍不正確。',2,'in'), 

// 自定義函數驗證用戶名格式
array('username','checkName','用戶名格式不正確。',0,'function'), 

// 在註冊或更改資料是調用 checkEmail 方法檢查郵箱
array('email','checkEmail',1,'callback'),

使用正則表達式(regex)驗證

上述幾類附加規則中,使用正則表達式是常用的,也是系統默認的驗證附加規則。系統內置了以下正則檢測規則:express

require(必須)、email(郵箱格式)、url(URL地址)、currency(貨幣)、number(數字)、qq(QQ號碼)、english(英文字符)。ide

這些附加規則能夠直接使用,若是這些附加規則沒法知足要求,能夠使用自定義的正則規則:函數

該規則要求用戶名只能爲英文字符及下劃線和數字組成,且長度爲3-15個字節。ui

要了解更多的正則表達式規則參見《PHP 經常使用正則表達式整理》。url

使用自定義函數(function)驗證

使用自定義函數驗證附加規則,函數能夠是 Common/common.php 裏的自定義函數,也能夠是 PHP 的內置函數:spa

class UserModel extends Model{
    protected $_validate = array(
        array('username','checkName','用戶名不符合要求。',0,'function'),
    };
}

自定義 checkName 函數:code

function checkName($username){
    if(!preg_match('/^{3,15}$/', $username)){
        return false;
    }else{
        return true;
    }
}

提示:對於用戶名的規則能夠直接使用正則驗證而無需函數,在此只是爲了演示自定義函數的驗證的用法而已。

使用方法(callback)驗證

ThinkPHP 自動驗證還支持調用當前 Model 類的一個方法來進行驗證。

class UserModel extends Model{
    protected $_validate = array(
        array('email','checkEmail','郵箱已經存在。',1,'callback'),
    };

    // checkEmail方法
    protected function checkEmail(){
        $User=new Model('User');
    // 新用戶註冊,驗證惟一
        if(empty($_POST<'uid'>)){
            if($user->getByEmail($_POST<'email'>)){
                return false;
            }else{
                return true;
            }
        }else{
            // 更改資料判斷郵箱與其餘人的郵箱是否相同
            if($user->where("uid!={$_POST<'uid'>} and email='{$_POST<'email'>}'")->find()){
                return false;
            }else{
                return true;
            }
        }
    }
}

當 checkEmail 方法返回 false 時,驗證就不經過。

可見 ThinkPHP 自動驗證功能十分強大,能知足對錶單的各類驗證要求。

相關文章
相關標籤/搜索