powar / json-validator
简单的PHP JSON验证器。非常快,配置简单。
1.0.0
2019-05-10 12:23 UTC
Requires
- php: >=7.1
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^8.1
This package is not auto-updated.
Last update: 2024-09-21 05:53:18 UTC
README
EasyJsonValidator - 简单的PHP JSON验证器。非常快,配置简单。此验证器无需JsonSchema(https://json-schema.fullstack.org.cn/)。
功能
- 简单类型检查,如字段
name
- 字符串 - 范围检查,如字段
number
- 从1到10,或字段date
-> 从2019-01-01到2019-02-01 - 必需检查,如字段
id
是必需的 - 嵌套对象检查,如多维数组,具有所有可用验证
- 任意日期格式的时间检查
- 通过正则表达式模式(preg_match)检查,如字段
email
-/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i
- 通过回调函数检查,如字段
email
-function($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); }
- 为任何规则自定义错误消息
安装
composer require powar/json-validator
使用
获取任何JSON
$json = json_encode(['id' => 11, 'name' => 'JohnDoe', 'balance' => null, 'date' => date(DateTime::ISO8601)]);
创建规则
$rules = [
'id' => [
Validator::KEY_TYPE => Validator::TYPE_INTEGER,
Validator::KEY_MAX_VAL => 10,
],
'name' => Validator::TYPE_STRING,
'balance' => Validator::TYPE_NULL,
'date' => Validator::TYPE_DATETIME,
];
验证
$validator = new \Powar\JsonValidator\Validator();
$validator->validate($json, $rules);
检查是否存在错误
if ($validator->hasErrors()) {
print_r($validator->getErrors());
}
array(1) {
'id' =>
string(20) "must be less than 10"
}
文档
制作规则
validate方法接受一个数组作为第二个参数,用于验证规则
简单示例
$rules = ['id' => 'int']
$validator->validate($json, $rules);
此规则将仅检查传入的JSON是否与id:integer字段匹配。
注意,你可以明确写出'int'或另一种类型,但我推荐使用Validator::TYPE常量。*
使用常量的示例
$rules = ['id' => Validator::TYPE_INTEGER];
规则常量的列表
使用配置的示例
$rules = ['id' => [
Validator::KEY_TYPE => Validator::TYPE_INTEGER,
Validator::KEY_MAX_VAL => 10,
]
];
注意,现在id包含一个数组,其中必须包含Validator :: KEY_TYPE键,该键必须包含类型,正如简单情况一样
配置常量的列表
一些示例
如果你包含对象,你可以使用存在规则
$someRule = [
'some_field' => [
Validator::KEY_TYPE => Validator::TYPE_INTEGER,
Validator::KEY_MAX_VAL => 10,
Validator::KEY_MAX_STR => 2,
],
'some_date' => [
Validator::KEY_TYPE => Validator::TYPE_DATETIME,
Validator::KEY_FORMAT => 'Y-m-d\TH:i:sP',
Validator::KEY_REQUIRE => false,
]
];
$rules = [
'some_id' => Validator::TYPE_INTEGER,
'some_clildren_element' => [
Validator::KEY_TYPE => Validator::TYPE_ARRAY,
Validator::KEY_RULE => $someRule,
]
];
或者你可以创建一些小的规则,如下所示
$idRule = [
Validator::KEY_TYPE => Validator::TYPE_INTEGER,
Validator::KEY_MIN_STR => 1,
Validator::KEY_MAX_STR => 11,
];
$dateRule = [
Validator::KEY_TYPE => Validator::TYPE_DATETIME,
Validator::KEY_FORMAT => DateTime::ISO8601,
Validator::KEY_REQUIRE => false,
];
然后将其用于任何规则
$rules = [
'some_id' => $idRule,
'some_date' => $dateRule,
];
注意!当你为TYPE_DATETIME创建规则时,需要小心,因为KEY_MIN_VAL和KEY_MAX_VAL的工作方式可能不明显
例如,你需要为出生日期创建检查(你知道,超过18岁)
$minDate = new DateTime();
$minDate->modify('-18 year');
$format = 'Y-m-d';
$rule = [
'day_of_birth' => [
Validator::KEY_TYPE => Validator::TYPE_DATETIME,
Validator::KEY_FORMAT => $format,
Validator::KEY_MIN_VAL => $minDate->format($format), //<< WRONG
]
];
应该使用 Validator::KEY_MAX_VAL
$minDate = new DateTime();
$minDate->modify('-18 year');
$format = 'Y-m-d';
$rule = [
'day_of_birth' => [
Validator::KEY_TYPE => Validator::TYPE_DATETIME,
Validator::KEY_FORMAT => $format,
Validator::KEY_MAX_VAL => $minDate->format($format),
]
];
回调示例
$rule = [
'email' => [
Validator::KEY_TYPE => Validator::TYPE_STRING,
Validator::KEY_CALLBACK => function($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
]
];
自定义错误消息
$someRule = [
'some_field' => [
Validator::KEY_TYPE => Validator::TYPE_INTEGER,
Validator::KEY_MAX_VAL => 10,
Validator::KEY_MAX_STR => 2,
Validator::KEY_LABEL => 'validator.error.some_field',
],
];
getErrors() -> ['some_field' => 'validator.error.some_field']
更多示例请参阅单元测试