🔴Webman.validate 高级表单处理和过滤器
v2.0.1
版本
2026-03-10
版本更新时间
89
安装
3
star
Youloge.validate Webman 高级表单验证器(PHP7.2+)
Webman 表单验证器是:Github Youloge.Tool 的子函数之一,如果安装了
webman.tool就不需要再安装webman.validate了。经过webman.validate过滤处理后的表单,基本可以达到入库要求,可以大大简化逻辑处理。[2.0.0+ 版本进行了重写 现在处理可以处理更加复杂的表单且不需要进行多次验证,在一个验证规则中即可处理任意复杂度的数据]
- [新]支持自定义匿名函数处理
- [新]支持数据流式流转处理
- 支持数据链式预处理处理
- 支持
对象和数组数据验证 - 支持自定义错误提示
- 支持
字段过滤,仅返回指定验证字段 - 可以对任意复杂表单进行处理过滤转化并合并结果
项目地址
Youloge.Validate Star 我 如果对你的项目有帮助 欢迎打赏~
- 2.0.1 [2026-03-07] 新增
流式处理 [M,N,Q],新增callable闭包自定义处理函数 - 1.4.2 [2025-11-11] 新增
sprintf,format规则,格式化字符串 - 1.4.0 [2025-10-25] 优化
required规则,允许0、'0'、false、[]、{} - 1.3.3 [2025-08-14] 新增
array和object数据类型 - 1.3.1 [2025-08-12] 默认数据类型与默认值:数据类型修复为一致
- 1.3.0 [2025-04-23] 添加
array_is_list函数,兼容到 php7.2+ - 1.2.8 [2025-03-20] 基本数据类型
int:100,float:1.02,bool:false,string:默认值提供默认值支持
安装使用
composer require youloge/webman.validate函数名称
useValidate()
使用说明
验证规则: |,:,,,#,[]
|分割多个规则:规则参数,多个参数用逗号分隔#自定义错误提示- $return = useValidate($params,$rules,$filter=true)
$params验证数据$rules验证规则$filter是否过滤数据,剔除规则之外的数据在返回 默认 true- 验证失败返回
['err'=>400,'msg'=>'错误提示'] - 验证成功返回 处理过后的数据
(filter)$params
参数说明
| 验证规则 | 说明 | 示例 | 规则类型 |
|---|---|---|---|
| required | 字段必填 | required | 基本处理 |
| int | 转为 int 类型 | int:10 | 基本处理 |
| bool | 转为 bool 类型 | bool:false | 基本处理 |
| float | 转为 float 类型 | float:1.2 | 基本处理 |
| string | 转为 string 类型 | int:string | 基本处理 |
| array | 转为 array 类型 | array:[] | 基本处理 |
| object | 转为 object 类型 | object:{} | 基本处理 |
| upper | 转为 大写字母 | upper | 基本处理 |
| lower | 转为 小写字母 | lower | 基本处理 |
| sprintf | 格式化字符串 | sprintf:%.2f | 基本处理 |
| format | 格式化字符串 | sprintf:%.4f | 基本处理 |
| join | 数组转字符串:可以指定连接符号,默认逗号 | join:@ | 基本处理 |
| trim | 去除参数两端空白符 | trim | 基本处理 |
| xss | 过滤特殊符号:支持不过滤(<b></b>标签) | xss:<b> | 基本处理 |
| html | 转义 HTML 标签 | html | 基本处理 |
| --- | --- | --- | --- |
| 验证是否为邮箱 | 常用验证 | ||
| mobile | 验证是否手机号(国内) | mobile | 常用验证 |
| url | 验证是否 URL 协议网址 | url | 常用验证 |
| ip | 验证是否 IP 地址 | ip | 常用验证 |
| date | 验证日期 | date:Y-m-D H:i:s | 常用验证 |
| idcard | 验证是否身份证(国内) | idcard | 常用验证 |
| regex | 正则验证 | regex:[a-zA-Z]{16} | 常用验证 |
| test | 正则验证 | regex:[a-zA-Z]{16} | 常用验证 |
| --- | --- | --- | --- |
| min | 参数最小值 | min:1 | 数字相关 |
| max | 参数最大值 | max:20 | 数字相关 |
| between | 参数取值范围 | between:1,100 | 数字相关 |
| --- | --- | --- | --- |
| start | 参数必须以%开头 | start:@ | 字符相关 |
| end | 参数必须以%结尾 | end:@qq.com | 字符相关 |
| digit | 参数必须为纯数字 | digit | 字符相关 |
| alpha | 参数必须为纯字母 | alpha | 字符相关 |
| alphanum | 参数必须为数字和数字 | alphanum | 字符相关 |
| length | 参数字符长度要在 min ~ max 之间 | length:12,14 | 字符相关 |
| len | 参数字符长度要在 min ~ max 之间 | length:12,14 | 字符相关 |
| --- | --- | --- | --- |
| in | 参数取值在之内 | between:a,b,c | 取值相关 |
| not | 参数取值在之外 | between:x,y,z | 取值相关 |
| count | 数组个数要在 min ~ max 之间 | count:1,6 | 取值相关 |
xss 过滤不仅会过滤 html 标签,还会过滤
',",;,--,%,_,(,), 可以防止Mysql 注入
- =============================
- = 过滤规则分为
预处理和验证规则新增闭包函数 - =============================
- =
基本处理:required int bool float string join trim upper lower sprintf format xss html - =
常用验证:email mobile url ip date time idcard regex test - =
数字相关:min max between - =
字符相关:start end digit alpha alphanum length - =
取值相关:in not count - =
闭包函数:function($field,$value){} - =============================
简单示例:
$params = [
'username' => 'admin',
'password' => '123456',
];
$rules =[
'username' => 'required|trim|lower|email', // 必填,去除空格,转小写,邮箱格式
'password' => function($field,$value){
// 验证不通过返回 `Exception` 即可
if(count($value) < 8){
throw new Exception("密码长度不足~");
}
// 验证通过 并处理数据
return md5($value);
}
];
@['err'=>$err,'msg'=>$msg] = $data = useValidator($params,$rules,$filter=true);
if($err === 400) return json(['err'=>400,'msg'=>$msg]);
复杂示例:
请求数据:
{
"title": "文章标题",
"content": "文章内容",
"type": 3,
"status": "00000001",
"share": 1,
"price": "a12.34",
"created": "2022-01-01 12:00:00",
"tags": ["标签1", "标签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
}
]
}
验证规则:
$rules =[
// length:64,6,30 (不是书写错误 不区分变量数量 不区分变量前后)
'title' => 'required|xss|length:64,6,30', // 必填,长度6-64 去除html去除 HTML 和 PHP 标签
'content' => 'required|html', // 必填,转义html标签
'type' =>'required|in:1,2,3', // 必填,只能是1,2,3,不能是其他值
'status' => 'required|int|not:0,99,100', // 必填,并转换成整数,不能是0,99,100
'share' => 'required|bool', // 必填,并转换成布尔值
'price' => 'required|float|format:%.2f|max:100', // 必填,并转换成浮点数 并格式化保留2位小数 最大100
'created' => 'required|date:Y-m-d H:i', // 必填,日期格式(默认为:Y-m-d H:i:s)
// 'tags' => 'required|count:1,6', // 必填,需要1~6个标签 [`相同键 只生效最后一个哦`]
// 'tags' =>['required|length:2,20'], // 数组的每个值需要2-20个字符 [`相同键 只生效最后一个哦`]
// 'tags' =>'required|join:-', // 使用-符号连接 [`相同键 只生效最后一个哦`]
// 当验证规则是数组且不止一个规则则可以写成流式处理(将上面针对tags的规则组成一个规则)
'tags'=>['required|count:1,6',['required|length:2,20','required|join:@']],
// 注意这个规则是[数组对象],所以下面的规则会循环验证数组内的对象
'list' => [
[
'name'=>'required|string', // 必填,并转换成字符串
'age'=>'required|int', // 必填,并转换成整数
'mail'=>'required|end:@qq.com', // 必填,必须以@qq.com结尾
]
],
// 这个规则是[单对象],所以下面的规则会验证对象
'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]);
}
流式处理
之前想对一个字段进行复杂操作,需要写第一步,第二步,第三步...,现在直接可以写成一维数组形式,规则:
['int:100'] 数组只有一个规则代表:数组按照改规则处理,当规则不止一个按照自动展开规则,再按照从左到右依次验证处理。
- 数组需要
1~6个标签 - 每个标签需要
至少2-20个字符 - 每个标签 是否包含违规字符
- 最终使用
,符号连接成字符串,正式项目表单会比这还要复杂,现在可以像以下这么写。
$rule_one = ['label'=>'required|count:1,6']; // 验证整个 label字段 满足required|count:1,6即可
$rule_two = ['label'=>['length:2,20']]; // 循环验证 label字段 每个字段都验证 length:2,20
// 注意:数组规则(多个 大于1)时候: 字符串规则 数组符号[]包裹规则
// 如果数组规则只有一个 那个它表示 对数组进行 循环验证 这是 V2 版本的新特性
@['err'=>$err,'msg'=>$msg] = $data_one = useValidator($params,[
'label'=>[
'required|count:1,6', // 先验证 label 必填 在验证 数组长度 1-6 之间
['length:2,20'], // 验证 label数组每个元素的内容 长度 2-20 之间
[function($field,$value){ // 验证 label数组每个元素的 内容
if(useDetection($value)){
return $value;
}
throw new Exception("包含违禁词~");
}],
'join:,' // 对 label数组元素 使用 , 号连接
]
]);
if($err === 400){ return json(['err'=>400,'msg'=>$msg]); }
// 验证通过输出 是一个逗号连起来的长字符串