zms / validate
数据验证器
v1.1.7
2026-01-30 08:47 UTC
Requires
- php: >=7.0
- ext-mbstring: *
- zms/exception: *
- zms/unit: ^1.0.7
README
安装
composer require zms/validate
<?php
declare(strict_types=1);
use Zms\Validate\Type;
内置规则大全
| 规则 | 常量 | 描述 |
|---|---|---|
| required | Type::REQUIRED | 必填 |
| required-choose | Type::REQUIRED_CHOOSE | 必选 |
| required-upload | Type::REQUIRED_UPLOAD | 必传 |
| safe | Type::SAFE | 安全接收 |
| default | Type::DEFAULT | 默认值 |
| string | Type::STRING | 字符串 |
| in | Type::IN | 包含 |
| exclude-in | Type::EXCLUDE_IN | 禁选指定项目 |
| multi-selector | Type::MULTI_SELECTOR | 多选验证器 |
| identity-number | Type::IDENTITY_NUMBER | 身份证号 |
| url | Type::URL | 网址 |
| point | Type::POINT | 位置坐标 |
| Type::EMAIL | 邮箱 | |
| ip | Type::IP | IP地址 |
| phone | Type::PHONE | 手机号 |
| mobile | Type::MOBILE | 手机号 |
| list | Type::LIST | 列表 |
| array | Type::ARRAY | 数组 |
| match | Type::MATCH | 正则表达式 |
| number | Type::NUMBER | 数字 |
| int | Type::INT | 整数 |
| money | Type::MONEY | 金额 |
| Type::QQ | QQ号 | |
| datetime | Type::DATETIME | 日期时间 默认Y-m-d H:i:s |
| date | Type::DATE | 日期 默认Y-m-d |
| date-format | Type::DATE_FORMAT | 时间字符串验证,正确就行,不验证格式 |
| list-intersect | Type::LIST_INTERSECT | 列表交集 |
| json | Type::JSON | json字符串 |
| compare | Type::COMPARE | 一致性对比 |
| accepted | Type::ACCEPTED | 通过、同意,用于确认协议勾选了同意等 |
| zipcode | Type::ZIPCODE | 邮编 |
| violate | Type::VIOLATE | 非法词汇检测 |
| domain | Type::DOMAIN | 域名检测 |
| bankcard | Type::BANKCARD | 银行卡号验证 |
验证示例(class验证)
declare(strict_types=1);
use Zms\Validate\ValidateAbstract;
use Zms\Validate\Type;
class ValidateData extends ValidateAbstract{
/**
* 验证规则
*/
public function rules(): array
{
return [
[['name','url'],Type::REQUIRED],
['name', Type::STRING],
['url', Type::URL],
];
}
/**
* 字段描述
*/
public function labels(): array
{
return [
'name' => '名称',
'url'=>'个人主页'
];
}
}
//验证器实例
$validate = new ValidateData();
验证示例(逻辑验证)
<?php
declare(strict_types=1);
use Zms\Validate\Validate
$validate = new Validate();
$validate->setRules([]);
$validate->setLabels([]);
$validate->setData([]);
验证
<?php
declare(strict_types=1);
$validate->validate();
if ($validate->isFail()) {//验证失败,获取错误信息
print_r($validate->getErrorList());
} else {//验证成功,获取验证器数据
print_r($validate->getSafeData());
}
验证器实例方法
| 方法 | 描述 |
|---|---|
| validate | 执行验证 |
| verifyMapping | 验证器映射 |
| setData | 设置验证数据 |
| getData | 获取要验证的数据 |
| setLabels | 设置字段描述 |
| setExclude | 排除验证的字段 |
| setRules | 设置验证规则 |
| setEmptySkip | 不存在的字段是否跳过 |
| setNoSkipping | 设置空值是否跳过 |
| setFields | 设置要验证的字段 |
| setScene | 验证场景 |
| where | 验证条件 |
| isFail | 获取验证状态 |
| getErrors | 获取错误信息 |
| getErrorList | 获取错误信息列表 |
| firstError | 获取第一条错误信息 |
| finalError | 获取最后一条错误信息 |
| addError | 添加一条错误信息 |
| hasError | 判断某字段是否有错误信息 |
| addErrors | 添加错误信息 |
| setSafe | 设置验证安全数据 |
| getSafeData | 获取通过验证后的安全数据 |
| getSafe | 获取指定安全验证数据 |
| beforeValidate | 验证前事件 |
| afterValidate | 验证后事件 |
方法验证器
<?php
declare(strict_types=1);
namespace Zms\Validate;
class UserValidate extends \Zms\Validate\ValidateAbstract{
public function rules():array {
return [
['username','usernameValidate']
];
}
/**
* @param mixed $value
* @param self $find
* @param array $data
* @return mixed|null
*/
public function usernameValidate($value, $find, $data) {
if($value){
return $value;//验证通过,返回数据
}
$this->addError($find,'数据验证失败');
return null;//验证失败必须返回null
}
}
回调函数验证器
<?php
declare(strict_types=1);
namespace Zms\Validate;
class UserValidate extends \Zms\Validate\ValidateAbstract{
public function rules():array {
return [
['username',function($value, $find, $data){
if($value){
return $value;
}
$this->addError($find,'昵称验证失败');
return null;
}]
];
}
}
多维数组验证
<?php
declare(strict_types=1);
namespace Zms\Validate;
use Zms\Validate\Type;
class UserValidate extends \Zms\Validate\ValidateAbstract{
public function rules():array {
return [
['user.mobile',Type::MOBILE]
];
}
public function labels():array {
return [
'user.mobile'=>'注册手机'
];
}
}
$validate=new UserValidate();
$validate->setData([
'user'=>['mobile'=>'19888888888']
]);
if($validate->validate()->isFail()){
print_r($validate->getSafeData());
}else{
print_r($validate->getErrors());
}
函数验证方法实例
<?php
declare(strict_types=1);
use Zms\Validate\{
Type
};
use function Zms\Validate\validate;
use function Zms\Validate\specificValidate;
include "../vendor/autoload.php";
$data = [
'id'=>10,
'user' => [
'name' => '张三',//用户名
'mobile' => '18676405902',
],
'bankcard' => '5162-2848-7889-7794'
];
$label=[
'user.mobile' => '用户手机',
'bankcard' => '银行卡号'
];
$rules=[
['id', Type::REQUIRED],
[['user.mobile'], Type::MOBILE, 'on' => ['add']],
[['user.name'], Type::STRING],
[['bankcard'], Type::BANKCARD, 'luhn' => false, 'convert' => true, 'on' => ['add']],
];
//只会验证 id和bankcard字段
specificValidate($rules, $data, ['id','bankcard'], $label);
//全部验证
validate($rules, $data, $label);
//只会验证 user.mobile和bankcard字段
validate($rules, $data, $label,'add');