vat / validate
A simple and flexible PHP validation library that supports multiple error handling methods
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/vat/validate
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2026-01-06 05:25:31 UTC
README
一个简单、灵活且功能强大的 PHP 数据验证库
✨ 特性
- 🚀 简单易用 - 直观的 API 设计,快速上手
- 🎯 框架无关 - 可在任何 PHP 项目中使用(Laravel、ThinkPHP、Webman 等)
- 🔧 灵活配置 - 支持多种验证规则和自定义验证
- 🎨 多种错误处理 - 支持异常、返回结果、回调函数等多种方式
- 📦 零依赖 - 无需安装其他依赖包
- ✅ 完整测试 - 包含完整的单元测试
- 📝 详细文档 - 提供丰富的使用示例和文档
- 🆓 MIT 协议 - 完全开源,可自由使用
📦 安装
通过 Composer 安装:
composer require vat/validate
🚀 快速开始
基础使用
use Vat\Validate; $data = [ 'name' => '张三', 'age' => 25, 'email' => 'test@example.com' ]; $rule = [ 'name' => '姓名不能为空', 'age' => ['number' => ['message' => '年龄必须是数字']], 'email' => '请输入正确的邮箱' ]; try { $result = Validate::check($data, $rule); echo "验证通过!"; } catch (\InvalidArgumentException $e) { echo "验证失败:" . $e->getMessage(); }
📖 使用方式
1. 默认方式(抛出异常)
try { $result = Validate::check($data, $rule); echo "验证通过!"; } catch (\InvalidArgumentException $e) { echo "验证失败:" . $e->getMessage(); }
2. 不抛出异常,返回结果
$result = Validate::check($data, $rule, false); if (isset($result['success']) && $result['success'] === false) { echo "验证失败:{$result['message']}"; echo "字段:{$result['field']"; } else { echo "验证通过!"; print_r($result); }
3. 使用回调函数
$result = Validate::check($data, $rule, function($message, $field) { // 自定义错误处理逻辑 echo "字段 [{$field}] 验证失败 - {$message}\n"; // 返回自定义结果 return [ 'success' => false, 'error_code' => 400, 'message' => $message ]; });
4. 使用全局错误处理器
Validate::setErrorHandler(function($message, $field) { echo "字段 [{$field}] 验证失败 - {$message}\n"; return ['success' => false, 'error_code' => 400]; }); $result = Validate::check($data, $rule);
注意:check() 方法的回调参数优先级高于全局错误处理器。
5. 使用自定义异常类
class CustomException extends \Exception { public function __construct($message) { parent::__construct("[自定义异常] " . $message); } } Validate::setExceptionHandler(CustomException::class); try { $result = Validate::check($data, $rule); } catch (CustomException $e) { echo "捕获自定义异常:" . $e->getMessage(); }
🔧 框架集成
Webman
use Tinywan\ExceptionHandler\Exception\BadRequestHttpException; Validate::setExceptionHandler(BadRequestHttpException::class); $result = Validate::check($data, $rule);
Laravel
use Illuminate\Validation\ValidationException; // 方式1:使用回调 Validate::setErrorHandler(function($message, $field) { throw new ValidationException("字段 {$field} 验证失败:{$message}"); }); $result = Validate::check($data, $rule); // 方式2:设置异常类 Validate::setExceptionHandler(ValidationException::class); $result = Validate::check($data, $rule);
ThinkPHP
use think\exception\ValidateException; Validate::setExceptionHandler(ValidateException::class); $result = Validate::check($data, $rule);
原生 PHP
$result = Validate::check($data, $rule, false); if (isset($result['success']) && $result['success'] === false) { echo $result['message']; }
📋 验证规则
必填验证
$rule = [ 'name', // 必填,默认错误消息 'email' => '邮箱不能为空' // 必填,自定义错误消息 ];
范围验证
$rule = [ 'name' => [ 'range' => [ 'min' => 2, 'max' => 5, 'mode' => 'UTF8', 'message' => '请输入2到5个文本' ] ] ];
数字验证
$rule = [ 'age' => [ 'number' => [ 'message' => '请输入数字' ] ] ];
身份证验证
$rule = [ 'idcard' => '请输入正确的身份证号' ];
手机号验证
$rule = [ 'mobile' => '请输入正确的手机号' ];
电话号验证
$rule = [ 'phone' => '请输入正确的电话号' ];
邮箱验证
$rule = [ 'email' => '请输入正确的邮箱' ];
URL验证
$rule = [ 'url' => '请输入正确的地址' ];
日期验证
$rule = [ 'month' => '请输入正确的月份', // YYYY-MM 'date' => '请输入正确的日期', // YYYY-MM-DD 'datetime' => '请输入正确的时间' // YYYY-MM-DD HH:MM:SS ];
密码验证
$rule = [ 'password' => [ 'password' => [ 'message' => '请输入正确的密码', 'min' => 6, 'max' => 20, 'letter' => 3, // 0: 不必须, 1: 小写, 2: 大写, 3: 大小写, 4: 同时包含 'numeric' => true, // 必须包含数字 'symbol' => true // 必须包含特殊字符 ] ] ];
密码确认验证
$rule = [ 'password_confirm' => [ 'same' => [ 'message' => '两次密码不一致', 'field' => 'password' ] ] ];
自定义验证函数
$rule = [ 'username' => [ 'custom_check' => [ 'func' => function($value, $rule, $field) { return strlen($value) >= 3; }, 'message' => '用户名至少3个字符' ] ] ];
组合验证规则
$rule = [ 'name', 'age' => [ 'number' => [ 'message' => '年龄必须是数字' ], 'range' => [ 'min' => 18, 'max' => 60, 'message' => '年龄必须在18到60之间' ] ], 'email' => '请输入正确的邮箱' ];
📚 API 文档
Validate::check($data, $rule, $throwExceptionOrCallback = true)
验证数据
参数:
$data(array) - 待验证的数据数组$rule(array) - 验证规则数组$throwExceptionOrCallback(bool|callable) - 错误处理方式:true(默认):验证失败时抛出异常false:验证失败时返回结果数组callable:验证失败时调用回调函数
返回值:
- 验证通过:返回原始数据数组
- 验证失败:根据参数返回结果或抛出异常
Validate::setErrorHandler($handler)
设置全局错误处理器
参数:
$handler(callable|string) - 回调函数或异常类名
优先级: check() 回调参数 > 全局错误处理器 > 默认异常
⚠️ 注意事项
- 默认情况下,验证失败会抛出
\InvalidArgumentException异常 - 如果
$throwExceptionOrCallback参数为false,则返回包含验证结果的数组 - 可以通过
setErrorHandler方法自定义错误处理方式 - 回调函数可以返回自定义结果,如果返回
null则继续使用默认处理 - 验证失败时返回的数组格式:
[ 'success' => false, 'message' => '错误消息', 'field' => '字段名' ]
📄 许可证
Copyright (c) 2026
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
🌟 Star History
如果这个项目对你有帮助,请给它一个 Star ⭐️
Made with ❤️ by Vat