文章出處

一. 驗證規則
數據驗證可以對表單中的字段進行非法的驗證操作。一般提供了兩種驗證方式:靜態定
義($_validate 屬性)和動態驗證(validate()方法)。

//驗證規則

1 array(
2 array(驗證字段1,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]),
3 array(驗證字段2,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]),
4 ......
5 );

PS:驗證字段、驗證規則和錯誤提示這三項是必選的,大多數也是用這三項;而驗證
條件、附加規則和驗證時間是可選的。

驗證字段:一般來說是表單的字段名,不一定必須和數據表匹配的,因為有一些比如密
碼確認等輔助字段的存在。


驗證規則:系統內置了常用的規則,require(字段必填)、email(郵箱格式)、url(url
格式)、currency(貨幣)、number(正整數)、integer(整數)、double(浮點數)、zip(郵
政編碼)、english(英文)。這些規則默認采用的附加規則是 regex,正則表達式驗證,只
不過是設定好的。

 

錯誤信息:驗證失敗后的提示。
驗證條件:共三種:

1.self::EXISTS_VALIDATE 或 0,表示存在字段就驗證(默認);
2.self::MUST_VALIDATE 或 1,表示必須驗證;
3.self::VALUE_VALIDATE 或 2,表示值不為空的時候驗證。

附加規則:配合驗證規則使用,包括一下規則:

 

規則 說明
regex  正則驗證,定義的驗證規則是一個正則表達式(默認)
function 函數驗證,定義的驗證規則是一個函數名

 

規則 說明
regex  正則驗證,定義的驗證規則是一個正則表達式(默認)
function 函數驗證,定義的驗證規則是一個函數名
callback  方法驗證,定義的驗證規則是當前模型類的一個方法
confirm

驗證表單中的兩個字段是否相同,定義的驗證規則是一
個字段名

equal 驗證是否等于某個值,該值由前面的驗證規則定義
notequal

驗證是否不等于某個值,該值由前面的驗證規則定義
(3.1.2版本新增)

in

驗證是否在某個范圍內,定義的驗證規則可以是一個數
組或者逗號分割的字符串

notin

驗證是否不在某個范圍內,定義的驗證規則可以是一個
數組或者逗號分割的字符串(3.1.2版本新增)

length

驗證長度,定義的驗證規則可以是一個數字(表示固定
長度)或者數字范圍(例如3,12 表示長度從3到12的范
圍)

between

驗證范圍,定義的驗證規則表示范圍,可以使用字符串
或者數組,例如1,31或者 array(1,31)

notbetween

驗證不在某個范圍,定義的驗證規則表示范圍,可以使
用字符串或者數組(3.1.2版本新增)

expire

驗證是否在有效期,定義的驗證規則表示時間范圍,可
以到時間,例如可以使用 2012-1-15,2013-1-15 表示
當前提交有效期在2012-1-15到2013-1-15之間,也可
以使用時間戳定義

 ip_allow  

驗證 IP 是否允許,定義的驗證規則表示允許的 IP 地址
列表,用逗號分隔,例如201.12.2.5,201.12.2.6

 ip_deny  

驗證 IP 是否禁止,定義的驗證規則表示禁止的 ip 地址
列表,用逗號分隔,例如201.12.2.5,201.12.2.6

 unique  

驗證是否唯一,系統會根據字段目前的值查詢數據庫來
判斷是否存在相同的值,當表單數據中包含主鍵字段時
unique 不可用于判斷主鍵字段本身

 

驗證時間:主要新增修改等驗證。

1.self::MODEL_INSERT 或 1 新增數據時驗證;
2.self::MODEL_UPDATE 或 2 編輯數據時驗證;
3.self::MODEL_BOTH 或 3 全部情況下驗證(默認)。

 

二. 靜態定義

在模型類里預先定義好該模型的自動驗證規則,就是靜態定義。

在 Home/controller/UserController.class.php 插入以下代碼:

 

 1 //控制器create()方法自動調用驗證
 2 $user = D('User');
 3 $data['user'] = '蠟筆小新'; 4   if ($user->create($data)) {
 5 echo '所有數據驗證成功!';
 6 } else {
 7 //輸出錯誤信息
 8 var_dump($user->getError());
9 }

 

這時,在 Home/Model/UserModel.class.php 插入以下檢測的代碼:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 
 5 class UserModel extends Model {
 6     protected $_validate= array(
 7         array('user','require','用戶名不得為空',0,'regex',3),
 8         );
 9 }

 

 

 array('user', 'require', '用戶不得為空!'),   內置驗證require,不得為空的用法,這時就會去驗證 $data['user'] = '蠟筆小新'; 這個數值,如果$data['user']為空的話,就會

var_dump()出'用戶不的為空'這條語句

 

需要注意的是 rray('user', 'require', '用戶不得為空!'), 里的user是和 Home/controller/UserController.class.php  中 $data['user'] = '蠟筆小新'; 里的user是必須相同的

要不然就不能驗證了。

 

ThinkPHP 提供了九種自動驗證內置方案,具體如下:

1 //內置驗證require,不得為空的用法
2 array('user', 'require', '用戶不得為空!'),
1 //內置驗證email,合法的郵箱格式
2 array('user', 'email', '郵箱格式不合法!'),
1 //內置驗證email,合法的郵箱格式,而且必須要有http://   但是我試了,發現沒有www是可行的
2 array('user', 'email', '郵箱格式不合法!'),
1 //內置驗證url,驗證網址是否合法
2 array('user', 'url', 'URL 路徑不合法!'),
1 //內置驗證currency,驗證是否為貨幣
2 array('user', 'currency', '貨幣格式不正確!'),
1 //內置驗證zip,驗證是否為六位整數郵政編碼
2 array('user', 'zip', '郵政編碼格式不正確!'),
1 //內置驗證number,驗證是否為正整數
2 array('user', number, '正整數格式不正確!'),
1 //內置驗證integer,驗證是否為整數,正負均可
2 array('user', 'integer', '整數格式不正確!'),
1 //內置驗證double,驗證是否為浮點數,正負均可
2 array('user', 'double', '整數格式不正確!'),
1 //內置驗證english,驗證是純英文
2 array('user', 'english', '不是純英文!'),

 

ThinkPHP 還提供了附加規則,來提升自動驗證的擴展性:

1 //附加規則regex,驗證3-6位純數字
2 array('user', '/^\d{3,6}$/', '不是 3-6 位純正數字', 0, 'regex'),

 

1 //附加規則equal,驗證是否和指定值相等
2 array('user', '張三', '值不對等', 0, 'equal'),

 

1 //附加規則notequal,驗證是否與指定值不等
2 array('user', '張三', '值不能相等', 0, 'notequal'),

 

1 //附加規則confirm,驗證兩條字段是否相同
2 array('user', 'name', '兩個用戶名對比不同!',0,'confirm'),

這時在 Home/controller/UserController.class.php  這應該要有$data['user']和$data['name']這兩個參數,要不然就沒有對比的了。

可以用在用戶注冊時,password和repassword,這樣就能驗證用戶輸入的密碼是確定的。

 

1 //附加規則in,某個范圍,可以是數組或逗號分割的字符串
2 array('user',  array(1,2,3), '不在指定范圍', 0, 'in'),
3 array('user', '張三,李四,王五', '不在指定范圍', 0, 'in'),

 

1 //附加規則notin,某個范圍,可以是數組或逗號分割的字符串
2 array('user',  array(1,2,3), '不得在指定范圍', 0, 'notin'),
3 array('user', '張三,李四,王五', '不得在指定范圍', 0, 'notin'),

 

1 //附加規則length,驗證長度或數字范圍
2 array('user', '3', '不得小于 3 位', 0, 'length'),
3 array('user', '3,5', '不得小于 3 位,不得大于 5 位', 0, 'length'),

 

1 //附加規則between,驗證某個范圍,數字或逗號字符串
2 array('user',  array(3,5), '必須是 3-5 之間的數字', 0, 'between'),
3 array('user', '3,5', '必須是 3-5 之間的數字', 0, 'between'),

 

1 //附加規則notbetween,驗證某個范圍,數字或逗號字符串
2 array('user',  array(3,5), '必須不是 3-5 之間的數字', 0, 'notbetween'),
3 array('user', '3,5', '必須不是 3-5 之間的數字', 0, 'notbetween'),

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()