??Webman.validate 表單處理和過(guò)濾器

v1.3.0
版本
2025-04-23
版本更新時(shí)間
14
安裝
0
star
Youloge.validate Webman 表單驗(yàn)證器(PHP7.2+)
Webman 表單驗(yàn)證器是:Github Youloge.Tool 的子函數(shù)之一,如果安裝了
webman.tool
就不需要再安裝webman.validate
了。經(jīng)過(guò)webman.validate
過(guò)濾處理后的表單,基本可以達(dá)到入庫(kù)要求,可以大大簡(jiǎn)化邏輯處理。
- 支持?jǐn)?shù)據(jù)預(yù)處理鏈?zhǔn)教幚?/li>
- 支持
對(duì)象
和數(shù)組
數(shù)據(jù)驗(yàn)證 - 支持過(guò)濾,僅保留指定字段
- 支持自定義錯(cuò)誤提示
- 支持
字段過(guò)濾
,僅返回指定驗(yàn)證字段 - 對(duì)上次驗(yàn)證器處理結(jié)果進(jìn)行再次過(guò)濾,可以實(shí)現(xiàn)復(fù)雜表單處理
項(xiàng)目地址
Youloge.Validate Star 我 如果對(duì)你的項(xiàng)目有幫助
歡迎打賞~
- 1.3.0 [2025-04-23] 添加
array_is_list
函數(shù),兼容到 php7.2+ - 1.2.8 [2025-03-20] 基本數(shù)據(jù)類(lèi)型
int:100
,float:1.02
,bool:false
,string:默認(rèn)值
提供默認(rèn)值支持
安裝使用
composer require youloge/webman.validate
函數(shù)名稱
useValidate()
使用說(shuō)明
驗(yàn)證規(guī)則: |
,:
,,
,#
|
分割多個(gè)規(guī)則:
規(guī)則參數(shù),
多個(gè)參數(shù)用逗號(hào)分隔#
自定義錯(cuò)誤提示- $return = useValidate($params,$rules,$filter=true)
$params
驗(yàn)證數(shù)據(jù)$rules
驗(yàn)證規(guī)則$filter
是否過(guò)濾數(shù)據(jù),剔除規(guī)則之外的數(shù)據(jù)在返回 默認(rèn) true- 驗(yàn)證失敗返回
['err'=>400,'msg'=>'錯(cuò)誤提示']
- 驗(yàn)證成功返回 處理過(guò)后的數(shù)據(jù)
(filter)$params
參數(shù)說(shuō)明
驗(yàn)證規(guī)則 | 說(shuō)明 | 示例 | 規(guī)則類(lèi)型 |
---|---|---|---|
required | 字段必填 | required | 基本處理 |
int | 轉(zhuǎn)為 int 類(lèi)型 | int:10 | 基本處理 |
bool | 轉(zhuǎn)為 bool 類(lèi)型 | bool:false | 基本處理 |
float | 轉(zhuǎn)為 float 類(lèi)型 | float:1.2 | 基本處理 |
string | 轉(zhuǎn)為 string 類(lèi)型 | int:string | 基本處理 |
join | 數(shù)組轉(zhuǎn)字符串:可以指定連接符號(hào),默認(rèn)逗號(hào) | join:@ | 基本處理 |
trim | 去除參數(shù)兩端空白符 | trim | 基本處理 |
xss | 過(guò)濾特殊符號(hào):支持不過(guò)濾(<b></b>標(biāo)簽) | xss:<b> | 基本處理 |
html | 轉(zhuǎn)義 HTML 標(biāo)簽 | html | 基本處理 |
--- | --- | --- | --- |
驗(yàn)證是否為郵箱 | 常用驗(yàn)證 | ||
mobile | 驗(yàn)證是否手機(jī)號(hào)(國(guó)內(nèi)) | mobile | 常用驗(yàn)證 |
url | 驗(yàn)證是否 URL 協(xié)議網(wǎng)址 | url | 常用驗(yàn)證 |
ip | 驗(yàn)證是否 IP 地址 | ip | 常用驗(yàn)證 |
date | 驗(yàn)證日期 | date:Y-m-D H:i:s | 常用驗(yàn)證 |
idcard | 驗(yàn)證是否身份證(國(guó)內(nèi)) | idcard | 常用驗(yàn)證 |
regex | 正則驗(yàn)證 | regex:[a-zA-Z]{16} | 常用驗(yàn)證 |
test | 正則驗(yàn)證 | regex:[a-zA-Z]{16} | 常用驗(yàn)證 |
--- | --- | --- | --- |
min | 參數(shù)最小值 | min:1 | 數(shù)字相關(guān) |
max | 參數(shù)最大值 | max:20 | 數(shù)字相關(guān) |
between | 參數(shù)取值范圍 | between:1,100 | 數(shù)字相關(guān) |
--- | --- | --- | --- |
start | 參數(shù)必須以%開(kāi)頭 | start:@ | 字符相關(guān) |
end | 參數(shù)必須以%結(jié)尾 | end:@qq.com | 字符相關(guān) |
digit | 參數(shù)必須為純數(shù)字 | digit | 字符相關(guān) |
alpha | 參數(shù)必須為純字母 | alpha | 字符相關(guān) |
alphanum | 參數(shù)必須為數(shù)字和數(shù)字 | alphanum | 字符相關(guān) |
length | 參數(shù)字符長(zhǎng)度要在 min ~ max 之間 | length:12,14 | 字符相關(guān) |
len | 參數(shù)字符長(zhǎng)度要在 min ~ max 之間 | length:12,14 | 字符相關(guān) |
--- | --- | --- | --- |
in | 參數(shù)取值在之內(nèi) | between:a,b,c | 取值相關(guān) |
not | 參數(shù)取值在之外 | between:x,y,z | 取值相關(guān) |
count | 數(shù)組個(gè)數(shù)要在 min ~ max 之間 | count:1,6 | 取值相關(guān) |
xss 過(guò)濾不僅會(huì)過(guò)濾 html 標(biāo)簽,還會(huì)過(guò)濾
'
,"
,;
,--
,%
,_
,(
,)
, 可以防止Mysql 注入
- =============================
- = 過(guò)濾規(guī)則分為
預(yù)處理
和驗(yàn)證規(guī)則
- =============================
- =
基本處理:
required int bool float string join trim upper lower xss html - =
常用驗(yàn)證:
email mobile url ip date time idcard regex test - =
數(shù)字相關(guān):
min max between - =
字符相關(guān):
start end digit alpha alphanum length - =
取值相關(guān):
in not count - =============================
簡(jiǎn)單示例:
$params = [
'username' => 'admin',
'password' => '123456',
];
$rules =[
'username' => 'required|trim|lower|email', // 必填,去除空格,轉(zhuǎn)小寫(xiě),郵箱格式
'password' => 'required|length:6,20', // 必填,長(zhǎng)度6-20
];
@['err'=>$err,'msg'=>$msg] = $data = useValidator($params,$rules,$filter=true);
if($err === 400){
return json(['err'=>400,'msg'=>$msg]);
}
復(fù)雜示例:
請(qǐng)求數(shù)據(jù):
{
"title": "文章標(biāo)題",
"content": "文章內(nèi)容",
"type": 3,
"status": "00000001",
"share": 1,
"price": "a12.34",
"created": "2022-01-01 12:00:00",
"tags": ["標(biāo)簽1", "標(biāo)簽2"],
"info": {
"origin": "https://www.youloge.com",
"ip": "127.0.0.1"
},
"list": [
{
"name": "張三",
"age": 18,
"mail": "EMAIL100@qq.com"
},
{
"name": "李四",
"age": 20
},
{
"name": "李四",
"age": 20
}
]
}
驗(yàn)證規(guī)則:
$rules =[
// length:64,6,30 (不是書(shū)寫(xiě)錯(cuò)誤 不區(qū)分變量數(shù)量 不區(qū)分變量前后)
'title' => 'required|xss|length:64,6,30', // 必填,長(zhǎng)度6-64 去除html去除 HTML 和 PHP 標(biāo)簽
'content' => 'required|html', // 必填,轉(zhuǎn)義html標(biāo)簽
'type' =>'required|in:1,2,3', // 必填,只能是1,2,3,不能是其他值
'status' => 'required|int|not:0,99,100', // 必填,并轉(zhuǎn)換成整數(shù),不能是0,99,100
'share' => 'required|bool', // 必填,并轉(zhuǎn)換成布爾值
'price' => 'required|floot|max:100', // 必填,并轉(zhuǎn)換成浮點(diǎn)數(shù) 最大100
'created' => 'required|date:Y-m-d H:i', // 必填,日期格式(默認(rèn)為:Y-m-d H:i:s)
'tags' => 'required|count:1,6', // 必填,需要1~6個(gè)標(biāo)簽 [`相同鍵 只生效最后一個(gè)哦`]
// 'tags' =>['required|length:2,20'], // 數(shù)組的每個(gè)值需要2-20個(gè)字符 [`相同鍵 只生效最后一個(gè)哦`]
// 'tags' =>'required|join:-', // 使用-符號(hào)連接 [`相同鍵 只生效最后一個(gè)哦`]
// 注意這個(gè)規(guī)則是數(shù)組-對(duì)象,所以下面的規(guī)則會(huì)循環(huán)驗(yàn)證數(shù)組內(nèi)的對(duì)象
'list' => [
[
'name'=>'required|string', // 必填,并轉(zhuǎn)換成字符串
'age'=>'required|int', // 必填,并轉(zhuǎn)換成整數(shù)
'mail'=>'required|end:@qq.com', // 必填,必須以@qq.com結(jié)尾
]
],
// 這個(gè)規(guī)則是對(duì)象,所以下面的規(guī)則會(huì)驗(yàn)證對(duì)象
'info' => [
'origin'=>'required|url', // 必填,需要為url格式
'ip'=>'required|ip', // 必填,需要為ip格式
]
];
$params = $request->all();
@['err'=>$err,'msg'=>$msg] = $data = useValidator($params,$rules,$filter=true);
if($err === 400){
return json(['err'=>400,'msg'=>$msg]);
}
特殊規(guī)則
表單數(shù)組驗(yàn)證:要實(shí)現(xiàn)比如一個(gè)
label
數(shù)組字段, 要求
- 數(shù)組需要
1~6個(gè)標(biāo)簽
- 且每個(gè)標(biāo)簽需要
至少2-20個(gè)字符
- 最終使用
-
符號(hào)連接,你需要這么寫(xiě)
$rule_one = ['label'=>'required|count:1,6']; // 必填,需要1~6個(gè)標(biāo)簽
$rule_two = ['label'=>['length:2,20']]; // 數(shù)組的每個(gè)值需要2-20個(gè)字符
$rule_three = ['label'=>'join:-']; // 使用-符號(hào)連接
@['err'=>$err,'msg'=>$msg] = $data_one = useValidator($params,$rule_one,true);
if($err === 400){ return json(['err'=>400,'msg'=>$msg]); }
// 用第一步的結(jié)果 作為第二步的驗(yàn)證規(guī)則 第三個(gè)參數(shù)為false 不剔除規(guī)則外字段
@['err'=>$err,'msg'=>$msg] = $data_two = useValidator($data_one,$rule_two,false);
if($err === 400){ return json(['err'=>400,'msg'=>$msg]); }
// 用第二步的結(jié)果 作為第三步的驗(yàn)證規(guī)則 第三個(gè)參數(shù)為false 不剔除規(guī)則外字段
@['err'=>$err,'msg'=>$msg] = $data_three = useValidator($data_two,$rule_three,false);
if($err === 400){ return json(['err'=>400,'msg'=>$msg]); }