🌟Validator 验证器 和 常用方法

v1.2.5
版本
2025-02-10
版本更新时间
46
安装
1
star
简介
造轮子:
一些常用工具:数据验证 | 常用Function
安装
composer require jeckleee/tools
配置
//配置文件: config/plugin/jeckleee/tools/app.php
return [
'enable' => true,
// 定义验证失败以后抛出的异常,webman框架建议使用 BusinessException::class
'exception' => Exception::class,
// 定义验证失败的错误码
'exception_code' => 500,
//验证失败错误如何返回(immediate,collective)
//immediate:立即返回,只要验证出现错误,立即抛出当前错误字段的异常信息,不再验证剩余的字段
//collective:集中返回,验证全部字段,收集所有异常,验证结束后在异常$e->getMessage()中返回错误字段的json字符串
'error_return_mode' => 'immediate',
];
使用场景1:验证表单提交的数据
use Jeckleee\Tools\Validator
$post=['name'=>'jeckleee','password'=>'123456','email'=>'jeckleee@qq.com','age'=>18];
//验证一组数据
$data=Validator::array($post,[
//只有写在此数组中的字段才会验证并存储到$data中
Validator::field('name')->required()->strTrim()->strLength(3,32)->verify('请填写正确的用户名'),
//使用自定义正则表达式验证
Validator::field('password')->required()->withRegex('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/')->verify('要求密码必须包含大写字母、小写字母、数字和特殊字符'),
Validator::field('email')->required()->isEmail()->verify('请填写正确的邮箱'),
//不验证score字段,如果字段不存在则返回["score"=>null]
Validator::field('score')->verify(),
//存在则验证,如果字段不存在则不验证,也不会出现在最终的数据中
Validator::field('score')->ifExisted()->isInt()->betweenNumber(0,100)->verify('请填写正确的分数'),
]);
//$data=['name'=>'jeckleee','password'=>'123456','email'=>'jeckleee@qq.com','score'=>null]; //age字段不会出现在$data中
// 按需使用 extract 函数将关联数组转换为变量
extract($data);
// 现在可以使用这些变量了
echo $name; // 输出: jeckleee
echo $password; // 输出: 123456
echo email; // 输出: jeckleee@qq.com
//验证一个字段
$data=Validator::one($post,[
Validator::field('age')->required()->isInt()->betweenNumber(1,120)->verify('请填写正确的年龄'),
]);
//$data=18
//自定义验证方法,只有回调方法返回(bool)true时,才验证通过,否则验证失败
$data=Validator::one($post,[
Validator::field('age')->fun(function ($value){
if ($value<18){
return false;
}
return true;
})->verify('年龄不能小于18岁'),
]);
//自定义验证失败的异常
$data=Validator::array($post,[
//......省略
],MyException::class);
//如果不定义异常类,则使用配置文件中定义的异常
//自定义错误码
$data=Validator::array($post,[
//第一种,在->verify()方法中定义,选填,适合对每一个字段定义不同的错误码的场景
Validator::field('name')->required()->verify('请填写账号',12001),
Validator::field('age')->required()->isInt()->betweenNumber(1,120)->verify('请填写正确的年龄',12002),
],MyException::class,12000);//这是第二种,所有的验证失败都用同一个错误码的场景
//三种异常定义的区别:
//1.在配置文件中定义异常和错误码,优先级最低
//2.在使用array()或者one()方法时定义异常和错误码,会覆盖配置文件中定义的异常
//3.在规则中的->verify()方法中定义的异常和错误码优级最高,会覆盖之前所有的定义
使用场景2: 验证变量是否正确,返回(bool) TURE or FALSE
use Jeckleee\Tools\Validator
$phone='123456789';
if (Validator::var($phone)->isMobile()->check()){
echo '手机号码正确';
}else{
echo '手机号码不正确'
}
注意事项
//查看全部可用的验证规则
echo json_encode(Validator::$showAllRules);
//常用方法:
Tool::***() 请自行探索