2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
1、array('user_name','^[0-9]*$','用戶名不符合規(guī)則',self::VALUE_VALIDATE,'regex',self::MODEL_BOTH),試下這樣
2、驗(yàn)證是否唯一,自定義個(gè)查詢條件,多增加1個(gè)array就可以了。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
ThinkPHP 自動(dòng)驗(yàn)證格式如下
array(驗(yàn)證字段,驗(yàn)證規(guī)則,錯(cuò)誤提示[,驗(yàn)證條件][,附加規(guī)則][,驗(yàn)證時(shí)間])
ThinkPHP 自動(dòng)驗(yàn)證定義的附加規(guī)則如下:
regex:使用正則進(jìn)行驗(yàn)證(默認(rèn))
unique:驗(yàn)證唯一性
confirm:驗(yàn)證表單中的兩個(gè)字段是否相同
equal:驗(yàn)證是否等于某個(gè)值
in:驗(yàn)證是否在某個(gè)范圍內(nèi)
function:使用函數(shù)驗(yàn)證
callback:使用方法驗(yàn)證
自動(dòng)驗(yàn)證例子
各種自動(dòng)驗(yàn)證參考例子如下:
// 默認(rèn)情況下用正則進(jìn)行驗(yàn)證
array('title','require','標(biāo)題不能為空。'),
array('order','number','排序必須是數(shù)字。',2),
array('email','email','郵箱格式不符合要求。'),
array('qq','qq','QQ號(hào)碼不正確。'),
// 在新增的時(shí)候驗(yàn)證標(biāo)題title字段是否唯一
array('title','','標(biāo)題已經(jīng)存在!',0,'unique',1),
// 驗(yàn)證確認(rèn)密碼是否和密碼一致
array('repassword','password','確認(rèn)密碼不正確。',0,'confirm'),
// 驗(yàn)證class填寫的值為 一班
array('class','一班','班級(jí)必須填寫一班。',0,'equal'),
// 當(dāng)值不為空的時(shí)候判斷是否在一個(gè)范圍內(nèi)
array('value',array(1,2,3),'值的范圍不正確。',2,'in'),
// 自定義函數(shù)驗(yàn)證用戶名格式
array('username','checkName','用戶名格式不正確。',0,'function'),
// 在注冊(cè)或更改資料是調(diào)用 checkEmail 方法檢查郵箱
array('email','checkEmail',1,'callback'),
使用正則表達(dá)式(regex)驗(yàn)證
上述幾類附加規(guī)則中,使用正則表達(dá)式是經(jīng)常使用的,也是系統(tǒng)默認(rèn)的驗(yàn)證附加規(guī)則。系統(tǒng)內(nèi)置了如下正則檢測(cè)規(guī)則:
require(必須)、email(郵箱格式)、url(URL地址)、currency(貨幣)、number(數(shù)字)、qq(QQ號(hào)碼)、english(英文字符)。
這些附加規(guī)則可以直接使用,如果這些附加規(guī)則無法滿足要求,可以使用自定義的正則規(guī)則:
array('username','/^{3,15}$/','用戶名不符合要求。'),
該規(guī)則要求用戶名只能為英文字符及下劃線和數(shù)字組成,且長(zhǎng)度為3-15個(gè)字節(jié)。
要了解更多的正則表達(dá)式規(guī)則參見《PHP 常用正則表達(dá)式整理》。
使用自定義函數(shù)(function)驗(yàn)證
使用自定義函數(shù)驗(yàn)證附加規(guī)則,函數(shù)可以是 Common/common.php 里的自定義函數(shù),也可以是 PHP 的內(nèi)置函數(shù):
class UserModel extends Model{
protected $_validate = array(
array('username','checkName','用戶名不符合要求。',0,'function'),
};
}
自定義 checkName 函數(shù):
function checkName($username){
if(!preg_match('/^{3,15}$/', $username)){
return false;
}else{
return true;
}
}
提示:對(duì)于用戶名的規(guī)則可以直接使用正則驗(yàn)證而無需函數(shù),在此只是為了演示自定義函數(shù)的驗(yàn)證的用法而已。
使用方法(callback)驗(yàn)證
ThinkPHP 自動(dòng)驗(yàn)證還支持調(diào)用當(dāng)前 Model 類的一個(gè)方法來進(jìn)行驗(yàn)證。
class UserModel extends Model{
protected $_validate = array(
array('email','checkEmail','郵箱已經(jīng)存在。',1,'callback'),
};
// checkEmail方法
protected function checkEmail(){
$User=new Model('User');
// 新用戶注冊(cè),驗(yàn)證唯一
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;
}
}
}
}
當(dāng) checkEmail 方法返回 false 時(shí),驗(yàn)證就不通過。
可見 ThinkPHP 自動(dòng)驗(yàn)證功能十分強(qiáng)大,能滿足對(duì)表單的各種驗(yàn)證要求。
- 2 回答
- 0 關(guān)注
- 143 瀏覽
添加回答
舉報(bào)