PHP自定义参数校验工具Validator
原创PHP服务端校验客户端请求传递的参数,做参数验证时有许多弊病
- 不同业务需求而做不同的参数校验
- 写许多判断条件
- 许多重复校验逻辑
- …
通过归纳整理,自定义了一个参数校验工具类Validator
使用方法:
/**
* @var array $params 需要校验参数数组(key=>value)
* @var array $rules 校验规则(key=>rules)
* @var array $message 错误信息(key.rule=>message)
*/
$validator = Validator::make($params, $keyRules, $messages)
校验规则:
required
:验证参数key的值不能为空。
以下情况参数key的值都为空:
- 值为null
- 值是空字符串
-
值是空数组
$validator = Validator::make($params, [ name => required ], [ name.required => 姓名不能为空 ]); if ($validator->fail) { throw new Exception($validator->errors[0]); }
required_if:field1,value1,field2,value2,…
:如果 field 等于 value (多个field=value的条件只需满足一个),那么验证参数key的值不能为空。
$validator = Validator::make($params, [
age => required_if:type,1|numeric,//当type=1时年龄不能为空
//或者
//age => [required_if:type,1, numeric],
//或者
//age => [required_if => type,1, numeric],
//或者
//age => [required_if => [type, 1], numeric],
], [
age.required => 年龄不能为空,
age.numeric => 年龄应为数字
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
required_if_all:field1,value1,field2,value2,...
:如果 field 等于 value (多个field=value的条件必须全部满足),那么验证参数key的值不能为空。
required_unless:field1,value1,field2,value2,...
:除非 field 等于 value (多个field=value的条件只需满足一个)时,否则验证参数key的值不能为空。
required_unless_all:field1,value1,field2,value2,...
:除非 field 等于 value (多个field=value的条件必须全部满足),否则验证参数key的值不能为空。
required_with:filed1,field2,...
:如果 field 不为空 (多个 field 不为空的条件只需满足一个),那么验证参数key的值不能为空。
required_with_all:filed1,field2,...
:如果 field 不为空 (多个 field 不为空的条件必须全部满足),那么验证参数key的值不能为空。
required_without:filed1,field2,...
:如果 field 为空(多个 field 为空的条件只需满足一个),那么验证参数key的值不能为空。
required_without_all:filed1,field2,...
:如果 field 为空(多个 field 为空的条件必须全部满足),那么验证参数key的值不能为空。
equal:value
: 验证参数key的值必须等于value。
equal_if:val,field1,value1,field2,value2,...
:如果 field 等于 value (多个field=value的条件只需满足一个),那么验证参数key的值必须等于val。
equal_if_all:val,field1,value1,field2,value2,...
:如果 field 等于 value (多个field=value的条件必须全部满足),那么验证参数key的值必须等于val。
equal_unless:val,field1,value1,field2,value2,...
:除非 field 等于 value (多个field=value的条件只需满足一个)时,否则验证参数key的值必须等于val。
equal_unless_all:val,field1,value1,field2,value2,...
:除非 field 等于 value (多个field=value的条件必须全部满足),否则验证参数key的值必须等于val。
numeric
:验证参数key的值应为数字。
min:value
:当验证参数key的值为数字时,其值必须大于等于value;当验证参数key的值非数字时,其值长度必须大于等于value。第二个参数 len
默认为0,当 len
=1时,验证参数key的值长度。
$params = [age => 15, member_code => 2345154678];
$validator = Validator::make($params, [
age => min:18,
member_code => required|min:12,1
], [
age.min => 年龄应在18岁以上(包含18岁),
member_code.required => 会员编号不能为空,
member_code.min => 会员编号长度应至少12位
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
max:value
:当验证参数key的值为数字时,其值必须小于等于value;当验证参数key的值非数字时,其值长度必须小于等于value。第二个参数 len
默认为0,当 len
=1时,验证参数key的值长度。
regex:pattern
:验证参数key必须满足正则表达式pattern。
$validator = Validator::make($params, [
phone => [required, regex:/^1d{10}$/]//若果存在规则regex,最好通过数组方式。因为正则表达式中可能含有|
会与规则分界符|
混淆
], [
phone.required => 手机号不能为空,
phone.regex => 手机号格式错误
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
not_regex:pattern
:验证参数必须排除正则表达式pattern。
in:value1,value2,...
:验证参数key的值必须在所有value中。
not_in:value1,value2,...
:验证参数key的值必须不在所有value中。
exists:table,field,params
:验证参数key的值必须在表table字段field中。
$validator = Validator::make($params, [
name => exists:test_db.user,name,//test_db为数据库名称
//name => exists:user,//未设定field则默认字段
//name => [exists => [user, name, [user_id => 1]]],//参数params为额外参数
], [
name.exists => 名称已经存在
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
not_exists:table,field,params
:验证参数key的值必须不在表table字段field中。
date
:验证参数key的值必须是日期,且格式为‘2022-09-05’。
datetime
:验证参数key的值必须是日期时间,且格式为‘2022-09-05 09:06:05’。
array
:验证参数key的值必须是数组。
json
:验证参数key的值必须是json。参数 decode
默认为0,当 decode
=1时,则将解码之后的值保存在验证器params属性中。
$validator = Validator::make($params, [
info => required|json:1,
], [
info.required => 信息不能为空,
info.json => 信息格式错误
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
//$validator->params[info];//解码后的info值
call
:自定义验证函数,该函数有两个参数: $params
、 $error
。
$validator = Validator::make($params, [
num => [
required,
call => function(&$params, &$error) {
if (1 == $params[type] && $params[num] > 10) {
$error = 普通类型数量不能超过10个;
return;
}
if (2 == $params && $params[num] < 5) {
//如果为特殊类型,且数量小于5,则默认数量20
$params[num] = 20;
}
}
],
], [
info.required => 信息不能为空
]);
if ($validator->fail) {
throw new Exception($validator->errors[0]);
}
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除