vinogradova / sanitizer
该包的最新版本(v1.0.4)没有可用的许可信息。
Sanitizer - 用于验证[键 => 值]格式结构数据的验证器
v1.0.4
2023-06-11 03:15 UTC
Requires
- php: >=8.0.0
Requires (Dev)
- phpunit/phpunit: ^9.5.26
This package is not auto-updated.
Last update: 2024-09-30 04:37:48 UTC
README
技术任务书
假设我们需要处理来自客户端的HTTP请求或包含JSON格式数据的第三方API响应。需要编写一个“sanitizer”库,该库负责根据提供的规范验证和规范化数据。
要求
- 独立完成任务,不考虑现有解决方案
- 使用PHP/Python/JavaScript/TypeScript语言,不得使用外部库(除了测试库)
- 支持以下数据类型
- 字符串
- 整数
- 浮点数
- 俄罗斯联邦电话号码
- 结构(已知键的关联数组)
- 单类型元素数组
- 应能够指定数组和结构的元素类型
- 结构和数组中的元素值可以是任何支持类型(包括其他数组、结构、数组结构、结构数组等)
- 生成所有错误值的列表。错误描述的格式应提供将每个错误与原始值关联的能力。例如,如果输入数据是基于包含(表格)字段的HTML表单生成的,则应能够将每个错误与特定的表单字段关联
- 测试
示例
-
对于JSON '{"foo": "123", "bar": "asd", "baz": "8 (950) 288-56-23"}',在程序员指定的字段类型“整数”、“字符串”和“电话号码”的情况下,应该得到包含三个字段:整数值foo = 123、字符串值bar = "asd"和字符串值"baz" = "79502885623"的关联数组
-
如果将字符串"123абв"指定为“整数”类型,则应生成错误
-
如果将字符串"260557"指定为“电话号码”类型,则应生成错误
实现
$data = ['a' => [9502900655, 89502900655, 79502900655, "+7(950)290-06-55"]];
$typeData = ['a' => ['phone']];
$sanitizerV1 = new Sanitizer($data, $typeData);
$sanitizerV1->sanitize();
// Результат
// ['a' => ["79502900655", "79502900655", "79502900655", "79502900655"]]
$data = [
'a' => [9502912600, 89502912600, 79502912600, "+7(950)291-26-00"],
'b' => 234.5,
'c' => [
'aa' => "abc",
"bb" => 234,
"cc" => [1, 2, 3],
],
'd' => [123, 123, 234],
'e' => [
'array' => [123, 123, 123],
]
];
$typeData = [
'a' => ['phone'],
'b' => 'float',
'c' => ['aa' => 'float', 'bb' => 'integer', 'cc' => ['integer']],
'd' => ['integer123'],
'e' => ['array' => ['phone']],
];
$sanitizerV2 = new Sanitizer($data, $typeData);
$sanitizerV2->sanitize();
// Результат
// [
// 'a' => ['79502912600', '79502912600', '79502912600', '79502912600'],
// 'b' => 234.5,
// 'c' => [
// 'aa' => '"abc" является типом string. Для него был указан тип: float.',
// "bb" => 234,
// "cc" => [1, 2, 3],
// ],
// 'd' => [
// 'Неизвестный тип данных: integer123.',
// 'Неизвестный тип данных: integer123.',
// 'Неизвестный тип данных: integer123.',
// ],
// 'e' => [
// 'array' => [
// 'Значение не соответстует формату номера телефона.',
// 'Значение не соответстует формату номера телефона.',
// 'Значение не соответстует формату номера телефона.',
// ]
// ]
// ];
sanitizer接受格式为:['key' => value]的数据及其类型。sanitize方法返回验证结果。
支持的数据类型
- string
- integer
- float
- phone
- array - 传递包含数据类型数组的类型。例如,['string']
- object - 传递与数据键匹配的关联数组,其中值是数据类型。例如,['a' => 'string']
数组和对象可以嵌套其他数组和对象。
运行测试
$ make test