ç³»ç»å
ç½®äºä¸äºå¸¸ç¨çéªè¯è§åï¼å¯ä»¥å®æ大é¨ååºæ¯çéªè¯éæ±ï¼å
æ¬ï¼
[TOC=2,2]
>[danger] éªè¯è§åä¸¥æ ¼åºå大å°å
## æ ¼å¼éªè¯ç±»
æ ¼å¼éªè¯ç±»çéªè¯è§åå¦æå¨ä½¿ç¨éææ¹æ³è°ç¨çæ¶åéè¦å ä¸`is`ï¼ä»¥`number`éªè¯ä¸ºä¾ï¼éè¦ä½¿ç¨ `isNumber()`ï¼ã
>[info]### require
éªè¯æ个å段å¿
é¡»ï¼ä¾å¦ï¼
~~~
'name'=>'require'
~~~
>[danger] å¦æéªè¯è§å没ææ·»å `require`就表示没æå¼çè¯ä¸è¿è¡éªè¯
>[danger] ç±äº`require`å±äºPHPä¿çåï¼æ以å¨ä½¿ç¨æ¹æ³éªè¯çæ¶åå¿
须使ç¨`isRequire`æè
`must`æ¹æ³è°ç¨ã
>[info]### number
éªè¯æ个å段çå¼æ¯å¦ä¸ºçº¯æ°åï¼éç¨`ctype_digit`éªè¯ï¼ä¸å
å«è´æ°åå°æ°ç¹ï¼ï¼ä¾å¦ï¼
~~~
'num'=>'number'
~~~
>[info]### integer
éªè¯æ个å段çå¼æ¯å¦ä¸ºæ´æ°ï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'num'=>'integer'
~~~
>[info]### float
éªè¯æ个å段çå¼æ¯å¦ä¸ºæµ®ç¹æ°åï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'num'=>'float'
~~~
>[info]### boolean æè
bool
éªè¯æ个å段çå¼æ¯å¦ä¸ºå¸å°å¼ï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'num'=>'boolean'
~~~
>[info]### email
éªè¯æ个å段çå¼æ¯å¦ä¸ºemailå°åï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'email'=>'email'
~~~
>[info]### array
éªè¯æ个å段çå¼æ¯å¦ä¸ºæ°ç»ï¼ä¾å¦ï¼
~~~
'info'=>'array'
~~~
>[info]### accepted
éªè¯æ个å段æ¯å¦ä¸ºä¸º yes, on, ææ¯ 1ãè¿å¨ç¡®è®¤"æå¡æ¡æ¬¾"æ¯å¦åææ¶å¾æç¨ï¼ä¾å¦ï¼
~~~
'accept'=>'accepted'
~~~
>[info]### date
éªè¯å¼æ¯å¦ä¸ºææçæ¥æï¼ä¾å¦ï¼
~~~
'date'=>'date'
~~~
ä¼å¯¹æ¥æå¼è¿è¡`strtotime`åè¿è¡å¤æã
>[info]### alpha
éªè¯æ个å段çå¼æ¯å¦ä¸ºçº¯åæ¯ï¼ä¾å¦ï¼
~~~
'name'=>'alpha'
~~~
>[info]### alphaNum
éªè¯æ个å段çå¼æ¯å¦ä¸ºåæ¯åæ°åï¼ä¾å¦ï¼
~~~
'name'=>'alphaNum'
~~~
>[info]### alphaDash
éªè¯æ个å段çå¼æ¯å¦ä¸ºåæ¯åæ°åï¼ä¸å线`_`åç ´æå·`-`ï¼ä¾å¦ï¼
~~~
'name'=>'alphaDash'
~~~
>[info]### chs
éªè¯æ个å段çå¼åªè½æ¯æ±åï¼ä¾å¦ï¼
~~~
'name'=>'chs'
~~~
>[info]### chsAlpha
éªè¯æ个å段çå¼åªè½æ¯æ±åãåæ¯ï¼ä¾å¦ï¼
~~~
'name'=>'chsAlpha'
~~~
>[info]### chsAlphaNum
éªè¯æ个å段çå¼åªè½æ¯æ±åãåæ¯åæ°åï¼ä¾å¦ï¼
~~~
'name'=>'chsAlphaNum'
~~~
>[info]### chsDash
éªè¯æ个å段çå¼åªè½æ¯æ±åãåæ¯ãæ°ååä¸å线_åç ´æå·-ï¼ä¾å¦ï¼
~~~
'name'=>'chsDash'
~~~
>[info]### cntrl
éªè¯æ个å段çå¼åªè½æ¯æ§å¶å符ï¼æ¢è¡ã缩è¿ãç©ºæ ¼ï¼ï¼ä¾å¦ï¼
~~~
'name'=>'cntrl'
~~~
>[info]### graph
éªè¯æ个å段çå¼åªè½æ¯å¯æå°å符ï¼ç©ºæ ¼é¤å¤ï¼ï¼ä¾å¦ï¼
~~~
'name'=>'graph'
~~~
>[info]### print
éªè¯æ个å段çå¼åªè½æ¯å¯æå°å符ï¼å
æ¬ç©ºæ ¼ï¼ï¼ä¾å¦ï¼
~~~
'name'=>'print'
~~~
>[info]### lower
éªè¯æ个å段çå¼åªè½æ¯å°åå符ï¼ä¾å¦ï¼
~~~
'name'=>'lower'
~~~
>[info]### upper
éªè¯æ个å段çå¼åªè½æ¯å¤§åå符ï¼ä¾å¦ï¼
~~~
'name'=>'upper'
~~~
>[info]### space
éªè¯æ个å段çå¼åªè½æ¯ç©ºç½å符ï¼å
æ¬ç¼©è¿ï¼åç´å¶è¡¨ç¬¦ï¼æ¢è¡ç¬¦ï¼å车åæ¢é¡µå符ï¼ï¼ä¾å¦ï¼
~~~
'name'=>'space'
~~~
>[info]### xdigit
éªè¯æ个å段çå¼åªè½æ¯åå
è¿å¶å符串ï¼ä¾å¦ï¼
~~~
'name'=>'xdigit'
~~~
>[info]### activeUrl
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçååæè
IPï¼ä¾å¦ï¼
~~~
'host'=>'activeUrl'
~~~
>[info]### url
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçURLå°åï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'url'=>'url'
~~~
>[info]### ip
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçIPå°åï¼éç¨`filter_var`éªè¯ï¼ï¼ä¾å¦ï¼
~~~
'ip'=>'ip'
~~~
æ¯æéªè¯ipv4åipv6æ ¼å¼çIPå°åã
>[info]### dateFormat:format
éªè¯æ个å段çå¼æ¯å¦ä¸ºæå®æ ¼å¼çæ¥æï¼ä¾å¦ï¼
~~~
'create_time'=>'dateFormat:y-m-d'
~~~
>[info]### mobile
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçææºï¼ä¾å¦ï¼
~~~
'mobile'=>'mobile'
~~~
>[info]### idCard
éªè¯æ个å段çå¼æ¯å¦ä¸ºææç身份è¯æ ¼å¼ï¼ä¾å¦ï¼
~~~
'id_card'=>'idCard'
~~~
>[info]### macAddr
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçMACå°åï¼ä¾å¦ï¼
~~~
'mac'=>'macAddr'
~~~
>[info]### zip
éªè¯æ个å段çå¼æ¯å¦ä¸ºææçé®æ¿ç¼ç ï¼ä¾å¦ï¼
~~~
'zip'=>'zip'
~~~
## é¿åº¦ååºé´éªè¯ç±»
>[info]### in
éªè¯æ个å段çå¼æ¯å¦å¨æ个èå´ï¼ä¾å¦ï¼
~~~
'num'=>'in:1,2,3'
~~~
>[info]### notIn
éªè¯æ个å段çå¼ä¸å¨æ个èå´ï¼ä¾å¦ï¼
~~~
'num'=>'notIn:1,2,3'
~~~
>[info]### between
éªè¯æ个å段çå¼æ¯å¦å¨æ个åºé´ï¼ä¾å¦ï¼
~~~
'num'=>'between:1,10'
~~~
>[info]### notBetween
éªè¯æ个å段çå¼ä¸å¨æ个èå´ï¼ä¾å¦ï¼
~~~
'num'=>'notBetween:1,10'
~~~
>[info]### length:num1,num2
éªè¯æ个å段çå¼çé¿åº¦æ¯å¦å¨æ个èå´ï¼ä¾å¦ï¼
~~~
'name'=>'length:4,25'
~~~
æè
æå®é¿åº¦
~~~
'name'=>'length:4'
~~~
> å¦æéªè¯çæ°æ®æ¯æ°ç»ï¼åå¤ææ°ç»çé¿åº¦ã
> å¦æéªè¯çæ°æ®æ¯File对象ï¼åå¤ææ件ç大å°ã
>[info]### max:number
éªè¯æ个å段çå¼çæ大é¿åº¦ï¼ä¾å¦ï¼
~~~
'name'=>'max:25'
~~~
> å¦æéªè¯çæ°æ®æ¯æ°ç»ï¼åå¤ææ°ç»çé¿åº¦ã
> å¦æéªè¯çæ°æ®æ¯File对象ï¼åå¤ææ件ç大å°ã
>[info]### min:number
éªè¯æ个å段çå¼çæå°é¿åº¦ï¼ä¾å¦ï¼
~~~
'name'=>'min:5'
~~~
> å¦æéªè¯çæ°æ®æ¯æ°ç»ï¼åå¤ææ°ç»çé¿åº¦ã
> å¦æéªè¯çæ°æ®æ¯File对象ï¼åå¤ææ件ç大å°ã
>[info]### after:æ¥æ
éªè¯æ个å段çå¼æ¯å¦å¨æ个æ¥æä¹åï¼ä¾å¦ï¼
~~~
'begin_time' => 'after:2016-3-18',
~~~
>[info]### before:æ¥æ
éªè¯æ个å段çå¼æ¯å¦å¨æ个æ¥æä¹åï¼ä¾å¦ï¼
~~~
'end_time' => 'before:2016-10-01',
~~~
>[info]### expire:å¼å§æ¶é´,ç»ææ¶é´
éªè¯å½åæä½ï¼æ³¨æä¸æ¯æ个å¼ï¼æ¯å¦å¨æ个æææ¥æä¹å
ï¼ä¾å¦ï¼
~~~
'expire_time' => 'expire:2016-2-1,2016-10-01',
~~~
>[info]### allowIp:allow1,allow2,...
éªè¯å½å请æ±çIPæ¯å¦å¨æ个èå´ï¼ä¾å¦ï¼
~~~
'name' => 'allowIp:114.45.4.55',
~~~
该è§åå¯ä»¥ç¨äºæ个åå°ç访é®æéï¼å¤ä¸ªIPç¨éå·åé
>[info]### denyIp:allow1,allow2,...
éªè¯å½å请æ±çIPæ¯å¦ç¦æ¢è®¿é®ï¼ä¾å¦ï¼
~~~
'name' => 'denyIp:114.45.4.55',
~~~
å¤ä¸ªIPç¨éå·åé
## å段æ¯è¾ç±»
>[info]### confirm
éªè¯æ个å段æ¯å¦åå¦å¤ä¸ä¸ªå段çå¼ä¸è´ï¼ä¾å¦ï¼
~~~
'repassword'=>'require|confirm:password'
~~~
æ¯æå段èªå¨å¹é
éªè¯è§åï¼å¦`password`å`password_confirm`æ¯èªå¨ç¸äºéªè¯çï¼åªéè¦ä½¿ç¨
~~~
'password'=>'require|confirm'
~~~
ä¼èªå¨éªè¯å`password_confirm`è¿è¡å段æ¯è¾æ¯å¦ä¸è´ï¼åä¹äº¦ç¶ã
>[info]### different
éªè¯æ个å段æ¯å¦åå¦å¤ä¸ä¸ªå段çå¼ä¸ä¸è´ï¼ä¾å¦ï¼
~~~
'name'=>'require|different:account'
~~~
>[info]### eq æè
= æè
same
éªè¯æ¯å¦çäºæ个å¼ï¼ä¾å¦ï¼
~~~
'score'=>'eq:100'
'num'=>'=:100'
'num'=>'same:100'
~~~
>[info]### egt æè
>=
éªè¯æ¯å¦å¤§äºçäºæ个å¼ï¼ä¾å¦ï¼
~~~
'score'=>'egt:60'
'num'=>'>=:100'
~~~
>[info]### gt æè
>
éªè¯æ¯å¦å¤§äºæ个å¼ï¼ä¾å¦ï¼
~~~
'score'=>'gt:60'
'num'=>'>:100'
~~~
>[info]### elt æè
<=
éªè¯æ¯å¦å°äºçäºæ个å¼ï¼ä¾å¦ï¼
~~~
'score'=>'elt:100'
'num'=>'<=:100'
~~~
>[info]### lt æè
<
éªè¯æ¯å¦å°äºæ个å¼ï¼ä¾å¦ï¼
~~~
'score'=>'lt:100'
'num'=>'<:100'
~~~
>[info]### å段æ¯è¾
éªè¯å¯¹æ¯å
¶ä»å段大å°ï¼æ°å¼å¤§å°å¯¹æ¯ï¼ï¼ä¾å¦ï¼
~~~
'price'=>'lt:market_price'
'price'=>'<:market_price'
~~~
## filteréªè¯
æ¯æ使ç¨`filter_var`è¿è¡éªè¯ï¼ä¾å¦ï¼
~~~
'ip'=>'filter:validate_ip'
~~~
## æ£åéªè¯
æ¯æç´æ¥ä½¿ç¨æ£åéªè¯ï¼ä¾å¦ï¼
~~~
'zip'=>'\d{6}',
// æè
'zip'=>'regex:\d{6}',
~~~
å¦æä½ çæ£å表达å¼ä¸å
å«æ`|`符å·çè¯ï¼å¿
须使ç¨æ°ç»æ¹å¼å®ä¹ã
~~~
'accepted'=>['regex'=>'/^(yes|on|1)$/i'],
~~~
ä¹å¯ä»¥å®ç°é¢å®ä¹æ£å表达å¼åç´æ¥è°ç¨ï¼ä¾å¦å¨éªè¯å¨ç±»ä¸å®ä¹regexå±æ§
~~~
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $regex = [ 'zip' => '\d{6}'];
protected $rule = [
'name' => 'require|max:25',
'email' => 'email',
];
}
~~~
ç¶åå°±å¯ä»¥ä½¿ç¨
~~~
'zip' => 'regex:zip',
~~~
## ä¸ä¼ éªè¯
>[info]### file
éªè¯æ¯å¦æ¯ä¸ä¸ªä¸ä¼ æ件
>[info]### image:width,height,type
éªè¯æ¯å¦æ¯ä¸ä¸ªå¾åæ件ï¼width heightåtypeé½æ¯å¯éï¼widthåheightå¿
é¡»åæ¶å®ä¹ã
>[info]### fileExt:å
许çæ件åç¼
éªè¯ä¸ä¼ æ件åç¼
>[info]### fileMime:å
许çæ件类å
éªè¯ä¸ä¼ æ件类å
>[info]### fileSize:å
许çæ件åè大å°
éªè¯ä¸ä¼ æ件大å°
## å
¶å®éªè¯
>[info] ### token:表å令çå称
表å令çéªè¯
>[info]### unique:table,field,except,pk
éªè¯å½å请æ±çå段å¼æ¯å¦ä¸ºå¯ä¸çï¼ä¾å¦ï¼
~~~
// 表示éªè¯nameå段çå¼æ¯å¦å¨user表ï¼ä¸å
å«åç¼ï¼ä¸å¯ä¸
'name' => 'unique:user',
// éªè¯å
¶ä»å段
'name' => 'unique:user,account',
// æé¤æ个主é®å¼
'name' => 'unique:user,account,10',
// æå®æ个主é®å¼æé¤
'name' => 'unique:user,account,10,user_id',
~~~
å¦æéè¦å¯¹å¤æçæ¡ä»¶éªè¯å¯ä¸ï¼å¯ä»¥ä½¿ç¨ä¸é¢çæ¹å¼ï¼
~~~
// å¤ä¸ªå段éªè¯å¯ä¸éªè¯æ¡ä»¶
'name' => 'unique:user,status^account',
// å¤æéªè¯æ¡ä»¶
'name' => 'unique:user,status=1&account='.$data['account'],
~~~
>[info]### requireIf:field,value
éªè¯æ个å段çå¼çäºæ个å¼çæ¶åå¿
é¡»ï¼ä¾å¦ï¼
~~~
// å½accountçå¼çäº1çæ¶å passwordå¿
é¡»
'password'=>'requireIf:account,1'
~~~
>[info]### requireWith:field
éªè¯æ个å段æå¼çæ¶åå¿
é¡»ï¼ä¾å¦ï¼
~~~
// å½accountæå¼çæ¶åpasswordå段å¿
é¡»
'password'=>'requireWith:account'
~~~
>[info]### requireWithout:field
éªè¯æ个å段没æå¼çæ¶åå¿
é¡»ï¼ä¾å¦ï¼
~~~
// mobileåphoneå¿
é¡»è¾å
¥ä¸ä¸ª
'mobile' => 'requireWithout:phone',
'phone' => 'requireWithout:mobile'
~~~
>[info]### requireCallback:callable
éªè¯å½æ个callable为ççæ¶åå段å¿
é¡»ï¼ä¾å¦ï¼
~~~
// 使ç¨check_requireæ¹æ³æ£æ¥æ¯å¦éè¦éªè¯ageå段å¿
é¡»
'age'=>'requireCallback:check_require|number'
~~~
ç¨äºæ£æ¥æ¯å¦éè¦éªè¯çæ¹æ³æ¯æ两个åæ°ï¼ç¬¬ä¸ä¸ªåæ°æ¯å½åå段çå¼ï¼ç¬¬äºä¸ªåæ°åæ¯ææçæ°æ®ã
~~~
function check_require($value, $data){
if(empty($data['birthday'])){
return true;
}
}
~~~
åªæcheck_requireå½æ°è¿åtrueçæ¶åageå段æ¯å¿
é¡»çï¼å¹¶ä¸ä¼è¿è¡åç»çå
¶å®éªè¯ã
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿