WebGeeker-Validation: Мощный валидатор параметров PHP.
адрес проекта:github Облако кода
Используется для проверки правильности параметров запроса интерфейса API.
При реализации API-интерфейса сервера для каждого параметра каждого интерфейса следует проверять, является ли значение допустимым, чтобы избежать неправильного ввода данных в систему. Можно сказать, что эта работа требует много времени и труда, но она должна быть выполнена. Более того, PHP сам по себе является слабо типизированным языком не только для проверки значения, но и для проверки соответствия типа данных, что более сложно.
Этот инструмент предназначен для этой работы, он может эффективно сократить объем кодирования, а код читаем.
Взгляните на следующий код, вы можете получить общее представление об использовании, это не должно быть сложно понять:
$params = $request->query(); // 获取GET参数
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, [
"offset" => "IntGe:0",
"count" => "Required|IntGeLe:1,200",
]);
Он поддерживает проверку нескольких типов данных: целое число, с плавающей запятой, логическое значение, строка, массив, объект, файл, дата и время, может проверять параметры во вложенной структуре данных, а также поддерживает проверку с условным суждением.
- содержание
- 1. Введение
- 2 Установка
- 3 Быстро начать
-
4 Подробное использование
- 4.1 Проверка целочисленных параметров
- 4.2 Проверка параметров с плавающей запятой
- 4.3 Проверка параметров bool
- 4.4 Проверка строковых параметров
- 4.5 Проверка параметров массива, объекта, файла, даты и времени
- 4.6 Объединение валидаторов (И)
- 4.7 Требуемый валидатор
- 4.8 Игнорировать все обязательные валидаторы
- 4.9 Проверка вложенных параметров
- 4.10 Условный верификатор
- 4.11 Правило проверки параллельно (или)
- 4.12 О специальных значениях
null
,""
,0
,false
Проблема - 4.13 О взаимосвязи между базовыми типами данных и строками
- 4.14 Пользовательский текст вывода сообщения об ошибке
- 4.15 Интернационализация
- 4.16 Интернационализация (до версии 0.4)
- Приложение — список валидаторов
1. Введение
1.1 Зачем писать такой инструмент?
Когда я использую фреймворк Laravel, Laravel предоставляет инструмент проверки параметров, но его не очень удобно использовать:
- Написать класс проверки (наследовать XXX) для каждой проверки, что слишком хлопотно, и в системе будет много-много больше классов; если эти классы повторно использовать в нескольких местах, или для «большего» повторного использования (уменьшить повторяющийся код) , а затем создать множество отношений наследования между этими классами, то обслуживание этих классов само по себе является большой проблемой;
- У валидаторов есть проблема «полисемии». Например, у него есть
size
Валидатор, который поддерживает проверку различных типов параметров, таких как строки, целые числа, файлы и т. д., для разных типов данных.size
значения разные. Это похоже на запоминание английских слов: существует так много английских слов, которые имеют очень много значений и имеют разные значения в разных контекстах. Например, слово «подарок» имеет значение «подарок», «подарок» и «подарок». Больше всего беспокоит такое многозначное слово, я не могу понять, что оно означает, и не могу его запомнить.
Для решения этих проблем и был написан такой инструмент.
1.2 Особенности
- Кратко, логика проверки понятна с первого взгляда (см. следующий пример)
- Легкий, нет необходимости определять и поддерживать различные классы проверки
- У валидатора понятная семантика и нет проблемы «полисемии»
- Поддержка проверки регулярного выражения
- Поддержка условной проверки
- Теоретически он может поддерживать проверку бесконечно вложенных параметров.
- Легко выучить и запомнить. Например, все валидаторы для целых чисел начинаются с «Int», все валидаторы с плавающей запятой начинаются с «Float» и так далее. Единственными, которые не соответствуют этому правилу, являются строковые валидаторы, некоторые из них начинаются с «Str», а некоторые не начинаются с «Str», например
Regexp
,Ip
,Email
,Url
Ждать. - Не привязан ни к какому фреймворку, без каких-либо зависимостей. Вы можете использовать этот инструмент в любом фреймворке, даже если вы не используете фреймворк.
- Модульные тесты для каждой функции (всего 41 тест, 369 утверждений)
1.3 Простой пример
В следующем примере показана проверка параметра Request запроса для получения списка жалоб пользователей (с использованием условной проверки и проверки вложенных структур данных):
//验证规则
$validations = [
"offset" => "IntGe:0", // 参数offset应该大于等于0
"count" => "Required|IntGeLe:1,200", // 参数count是必需的且大于等于1小于等于200
"type" => "IntIn:1,2", // 参数type可取值为: 1, 2
"state" => [
'IfIntEq:type,1|IntEq:0', // 如果type==1(批评建议),那么参数state只能是0
'IfIntEq:type,2|IntIn:0,1,2', // 如果type==2(用户投诉),那么参数state可取值为: 1, 2, 3
],
"search.keyword" => "StrLenGeLe:1,100", // search.keyword 应该是一个长度在[1, 100]之间的字符串
"search.start_time" => "Date", // search.start_time 应该是一个包含合法日期的字符串
"search.end_time" => "BoolSmart", // search.end_time 应该是一个包含合法日期的字符串
];
// 待验证参数
$params = [
"offset" => 0, // 从第0条记录开始
"count" => 10, // 最多返回10条记录
"type" => 2, // 1-批评建议, 2-用户投诉
"state" => 0, // 0-待处理, 1-处理中, 2-已处理
"search" => [ // 搜索条件
"keyword" => '硬件故障', // 关键字
"start_time" => "2018-01-01", // 起始日期
"end_time" => "2018-01-31", // 结束日期
],
];
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, $validations);
2 Установка
Установить через композер
composer require webgeeker/validation:^0.4
3 Быстро начать
3.1 Полный пример (без использования фреймворка)
Этот пример непосредственно проверяет$_POST
(форма POST), показывающие самое основное использование
<?php
include "vendor/autoload.php";
use WebGeeker\Validation\Validation;
try {
Validation::validate($_POST, [
"offset" => "IntGe:0", // 参数offset应该大于等于0
"count" => "Required|IntGeLe:1,200", // 参数count是必需的且大于等于1小于等于200
]);
} catch (\Exception $e) {
echo $e->getMessage();
}
Уведомление: если проверка не пройдена, будет выдано исключение, а исключение будет содержать информацию об ошибке.
3.2 Обработка ошибок при неудачной проверке
Если проверка не удалась,Validation::validate(...)
Метод будет генерировать исключения. Рекомендуется единообразно захватывать эти исключения на уровне фреймворка, извлекать информацию с описанием ошибки и возвращать ее клиенту.
3.3 Использование в сторонних фреймворках
Сторонние фреймворки обычно предоставляют объекты Request, которые могут получать параметры GET и POST (в качестве примера возьмем Laravel).
//$params = $request->query(); // 获取GET参数
$params = $request->request->all(); // 获取POST参数
// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, [
// 此处省略验证规则
]);
4 Подробное использование
4.1 Проверка целочисленных параметров
Все валидаторы целых чисел начинаются с «Int» и используются для проверки целочисленных значений (таких как123
) или целочисленная строка (например,"123"
). Никакие другие типы данных не совпадают.
"size" => "IntGeLe:1,100"
Для этой проверки требуется, чтобы параметр size был целым числом, большим или равным 1 и меньшим или равным 100.
Полный список целочисленных валидаторов см. в Приложении A.1.
4.2 Проверка параметров с плавающей запятой
Все валидаторы с плавающей запятой начинаются с «Float» и используются для проверки значений с плавающей запятой (например,1.0
), строки с плавающей запятой (например,"1.0"
), целочисленные значения (такие как123
) или целочисленная строка (например,"123"
). Никакие другие типы данных не совпадают.
"height" => "FloatGeLe:0.0,100.0"
Для этой проверки требуется, чтобы параметр «высота» был числом с плавающей запятой, большим или равным 0 и меньшим или равным 100,0.
Полный список валидаторов с плавающей запятой см. в Приложении A.2.
4.3 Проверка параметров bool
Есть только два логических валидатора:
- Bool: Допустимые значения:
true
,false
,"true"
,"false"
(строки игнорируют регистр). - BoolSmart: Допустимые значения:
true
,false
,"true"
,"false"
,1
,0
,"1"
,"0"
,"yes"
,"no"
,"y"
,"n"
(строки игнорируют регистр)
пример
"accept" => "BoolSmart"
См. Приложение A.3 для получения полного списка валидаторов bool.
4.4 Проверка строковых параметров
Строковые валидаторы не все начинаются с «Str». Принимаются только строковые данные, другие типы данных не совпадают.
пример 1:
"name" => "StrLenGeLe:2,20"
Для этой проверки требуется, чтобы параметр «имя» был строкой длиной от 2 до 20 (длина строки определяетсяmb_strlen()
подлежат расчету).
Пример 2:
"comment" => "ByteLenLe:1048576"
Для этой проверки требуется, чтобы параметр «комментарий» был строкой с длиной байта не более 1048576 (длина байтаstrlen()
подлежат расчету).
Пример 3:
"email" => "Email"
Для этой проверки требуется, чтобы параметр "email" был действительным адресом электронной почты.
Пример 4 (проверка регулярного выражения):
"phone" => "Regexp:/^1(3[0-9]|4[579]|5[0-35-9]|7[0135678]|8[0-9]|66|9[89])\d{8}$/"
Для этой проверки требуется, чтобы параметр «телефон» был действительным номером телефона.
Что касается того, какие специальные символы в регулярных выражениях необходимо экранировать, просто используйтеpreg_match()
Проверяется функция, например:
preg_match('/^string$/', $string);
затем поставьте два'/'
номер и его средняя часть копируются и помещаются вRegexp:
После этого никакого дополнительного экранирования не требуется, даже при наличии обычного'|'
Этот специальный символ не нужно экранировать.
Полный список валидаторов строк см. в Приложении A.4.
4.5 Проверка параметров массива, объекта, файла, даты и времени
См. Приложение A.5-A.8.
4.6 Объединение валидаторов (И)
В правиле может быть несколько последовательных валидаторов, и между ними существует отношение «И», например:
"file" => "FileMaxSize:10m|FileImage"
Для этой проверки требуется, чтобы параметр «файл» был файлом изображения, а размер файла не превышал 10 м.
4.7 Требуемый валидатор
- Необходимый валидатор требует, чтобы параметр существовал и его значение не могло быть
null
(это на PHPnull
значение, а не строку "null") (значение параметраnull
Эквивалент параметра отсутствует). - Если несколько валидаторов объединены в цепочку, обязательный валидатор должен предшествовать другим валидаторам.
- Если есть также условный валидатор, Required должен быть объединен после условного валидатора.
- Если в правиле валидации нет Required, то валидация будет выполняться только при наличии параметра.Если валидация не пройдена, будет выдано исключение, если параметр не существует, то он не будет валидирован (эквивалентно прохождению Проверка)
пример:
"size" => "Required|StrIn:small,middle,large"
Проверка требует, чтобы параметр «размер» был строкой «маленький», «средний» или «большой».
4.8 Игнорировать все обязательные валидаторы
Например, при создании пользователя требуется указать все имя, пол и возраст, но при обновлении информации о пользователе не обязательно указывать всю информацию, а предоставленная информация будет обновляться.
$validations = [
"name" => "Required|StrLenGeLe:2,20",
"sex" => "Required|IntIn:0,1",
"age" => "Required|IntGeLe:1,200",
];
$userInfo = [
"name" => "tom",
"sex" => "0",
"age" => "10",
];
Validation::validate($userInfo, $validations); // 创建用户时的验证
unset($userInfo["age"]); // 删除age字段
Validation::validate($userInfo, $validations, true); // 更新用户信息时的验证
Обратите внимание на последнюю строку кода выше:validate()
Третий параметр функции имеет значение true, чтобы игнорировать все обязательные валидаторы.
Таким образом, нам нужно только написать правило проверки, которое можно использовать для двух интерфейсов создания пользователей и одновременного обновления информации о пользователях.
4.9 Проверка вложенных параметров
В следующем примере показана проверка вложенных параметров, содержащих массивы и объекты:
$params = [
"comments" => [
[
"title" => "title 1",
"content" => "content 1",
],
[
"title" => "title 1",
"content" => "content 1",
],
[
"title" => "title 1",
"content" => "content 1",
],
]
];
$validations = [
"comments[*].title" => "Required|StrLenGeLe:2,50",
"comments[*].content" => "Required|StrLenGeLe:2,500",
];
Validation::validate($params, $validations);
4.10 Условный верификатор
Все условные валидаторы начинаются с «Если».
Например, если вы хотите набрать группу моделей, требование для мужчин должно быть более 180, а для женщин — более 170. Проверка может быть записана следующим образом:
$validations = [
"sex" => "StrIn:male,female",
"height" => [
"IfStrEq:sex,male|IntGe:180",
"IfStrEq:sex,female|IntGe:170",
],
];
Значение параметра "пол" другое, и правила проверки параметра "рост" тоже разные.
Полный список условных валидаторов см. в Приложении A.9.
4.11 Правило проверки параллельно (или)
Несколько правил проверки могут быть подключены параллельно, и между ними существует связь «или», например
"type" => [
"StrIn:small,middle,large",
"IntIn:1,2,3",
]
Приведенная выше проверка требует, чтобы параметр «тип» был либо строкой «маленький», «средний» или «большой», либо целым числом 1, 2 или 3.
Параллельное подключение правил верификации — это не просто отношение «или». Конкретный процесс верификации выглядит следующим образом:
- Эти правила проверяются по порядку, и если одно правило проверки проходит успешно, проверка параметра проходит успешно.
- Если все правила валидации игнорируются (если условия валидатора не выполнены, или нет требуемого валидатора и параметр не существует, или правил валидации 0), валидация параметра также считается пройденной.
- Вышеуказанные два не выполняются, тогда проверка параметра завершается неудачно.
Полностью прояснить эти правила непросто, поэтому не рекомендуется использовать правила проверки параллельно и стараться не проектировать параметры, требующие этого метода проверки.
4.12 О специальных значенияхnull
, ""
,0
,false
Проблема
Эти специальные значения не эквивалентны, это разные типы данных (нужно проверять разными валидаторами):
-
""
является строкой. -
0
является целым числом. -
false
имеет тип bool. -
null
пуст для PHP. Это имеет особое значение в этом инструменте.
Если значение параметраnull
, инструмент будет рассматривать параметр как несуществующий.
Например, следующие два массива эквивалентны этому инструменту.
$params = [
"name" => "hello",
];
и
$params = [
"name" => "hello",
"comment" => null,
];
эквивалентны.
4.13 О взаимосвязи между базовыми типами данных и строками
Для следующего URL-адреса
http://abc.com/index.php?p1=&&p2=hello&&p3=123
Массив параметров, который мы получим:
$params = [
"p1" => "",
"p2" => "hello",
"p3" => "123",
];
Уведомление:
- Значение параметра «p1» — пустая строка.
""
, вместоnull
. - Значение параметра "p3" представляет собой строку
"123"
, вместо целого числа123
. - HTTP-запрос метода GET не может быть доставлен
null
стоило того.
Все валидаторы этого инструментаСтрогая типизацияДа, "Int*" проверяет целочисленный тип, "Float*" проверяет тип с плавающей запятой, а "Str*" проверяет тип строки. Если типы данных не совпадают, проверка завершается ошибкой. Но строковый тип является исключением.
Из-за регулярных HTTP-запросов все основные типы данных в конечном итоге преобразуются в строки, поэтому:
- Целое число
123
и строка"123"
Все можно проверить валидатором "Int"; - плавающая точка
123.0
и строка"123.0"
Все можно проверить валидатором "Float"; - логический
true
и строка"true"
Все можно проверить валидатором "Bool"; - но
null
значения и строки"null"
никогда не эквивалентен, строка"null"
Просто нормальные струны.
4.14 Пользовательский текст вывода сообщения об ошибке
Если проверка параметра не удалась,Validation::validate()
Метод выдаст исключение, и это исключение будет содержать текст, описывающий сообщение об ошибке, которая не прошла проверку.
Но этот текст описания может быть не таким удобным для пользователя, мы можем настроить эти тексты с помощью двух псевдо-валидаторов:
-
Alias
Используется для настройки имени параметра (это имя будет объединено с внутренним шаблоном сообщения об ошибке для создания окончательного текста описания сообщения об ошибке) -
>>>
Используется для настройки текста описания ошибки (этот текст полностью заменит текст описания ошибки, сгенерированный шаблоном).
См. пример ниже:
$params = [
"title" => "a",
];
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50",
]); // 抛出异常的错误描述为:“title”长度必须在 2 - 50 之间
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50|Alias:标题", // 自定义参数名称
]); // 抛出异常的错误描述为:“标题”长度必须在 2 - 50 之间
Validation::validate($params, [
"title" => "Required|StrLenGeLe:2,50|>>>:标题长度应在2~50之间", // 自定义错误信息描述文本
]); // 抛出异常的错误描述为:标题长度应在2~50之间
См. Приложение A.10 для получения более подробной информации.
4.15 Интернационализация
Начиная с версии 0.4:
- использовать новую статическую переменную-член
$langCode2ErrorTemplates
Основная цель перевода «шаблона сообщения об ошибке» — упростить формат (спасибо @gitHusband за предложение). - старая таблица перевода
$langCodeToErrorTemplates
Существующий код по-прежнему действителен, его не нужно изменять (см. следующий раздел). Если старая и новая таблицы перевода предоставлены одновременно, приоритет отдается новой, и старая не может быть найдена в новой таблице.
Для поддержки интернационализации вам необходимо настроить класс, наследовать\WebGeeker\Validation\Validation
, перегружая две статические переменные-члены:
-
$langCode2ErrorTemplates
Таблица сравнения переводов для предоставления «шаблонов сообщений об ошибках». Полный список шаблонов сообщений об ошибках можно найти по адресу\WebGeeker\Validation\Validation::$errorTemplates
найдена переменная-член -
$langCodeToTranslations
Используется для предоставления «имени пользовательского параметра» (поAlias
указанный) и "пользовательский текст описания ошибки" (по>>>
указана) таблица сравнения переводов.
Пример класса приведен ниже:
class MyValidation extends Validation
{
// “错误提示信息模版”翻译对照表
protected static $langCodeToErrorTemplates = [
"zh-tw" => [
'Int' => '“{{param}}”必須是整數', // 🌝
'IntGt' => '“{{param}}”必須大於 {{min}}',
'Str' => '“{{param}}”必須是字符串',
],
"en-us" => [
'Int' => '{{param}} must be an integer',
'IntGt' => '{{param}} must be greater than {{min}}',
'Str' => '{{param}} must be a string',
],
];
// 文本翻译对照表
protected static $langCodeToTranslations = [
"zh-tw" => [
"变量" => "變量", // 🌙
"变量必须是整数" => "變量必須是整數", // ⭐
],
"en-us" => [
"变量" => "variable",
"变量必须是整数" => "variable must be an integer",
],
];
}
Уведомление:
- Код языка чувствителен к регистру, рекомендуется использовать строчные буквы, например «zh-cn», «en-us» и т. д.
- Название кода языка произвольное, вы можете назвать его как хотите, например, «abc» (рекомендуется использовать стандартный код языка).
использовать этоMyValidation
Класс, чтобы проверить, вы можете добиться перевода текста.
MyValidation::setLangCode("zh-tw"); // 设置语言代码
MyValidation::validate(["var" => 1.0], [
"var" => "Int", // 既没有Alias,也没有>>>,只会翻译错误提示信息模版(对应🌝那行)
]); // 会抛出异常:“var”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|Alias:变量", // 有Alias,除了翻译错误提示信息模版外,还会翻译参数名称(对应🌙那行)
]); // 会抛出异常:“變量”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|>>>:变量必须是整数", // 有>>>,会翻译自定义错误描述文本(对应⭐那行)
]); // 会抛出异常:變量必須是整數
Если указан неправильный код языка или переведенный текст не найден, то перевод не выполняется и выводится исходный текст.
4.16 Интернационализация (до версии 0.4)
(Если вы используете версию 0.4 и более позднюю, рекомендуется использовать новую схему интернационализации (см. предыдущий раздел), которая является более краткой).
Для поддержки интернационализации вам необходимо настроить класс, наследовать\WebGeeker\Validation\Validation
, перегружая две статические переменные-члены:
-
$langCodeToErrorTemplates
Таблица сравнения переводов для предоставления «шаблонов сообщений об ошибках». Полный список шаблонов сообщений об ошибках можно найти по адресу\WebGeeker\Validation\Validation::$errorTemplates
найдена переменная-член -
$langCodeToTranslations
Используется для предоставления «имени пользовательского параметра» (поAlias
указанный) и "пользовательский текст описания ошибки" (по>>>
указана) таблица сравнения переводов.
Пример класса приведен ниже:
class MyValidation extends Validation
{
// “错误提示信息模版”翻译对照表
protected static $langCodeToErrorTemplates = [
"zh-tw" => [
"“{{param}}”必须是整数" => "“{{param}}”必須是整數", // 🌝
"“{{param}}”必须是字符串" => "“{{param}}”必須是字符串",
],
"en-us" => [
"“{{param}}”必须是整数" => "{{param}} must be a integer",
"“{{param}}”必须是字符串" => "{{param}} must be a string",
],
];
// 文本翻译对照表
protected static $langCodeToTranslations = [
"zh-tw" => [
"变量" => "變量", // 🌙
"变量必须是整数" => "變量必須是整數", // ⭐
],
"en-us" => [
"变量" => "variable",
"变量必须是整数" => "variable must be an integer",
],
];
}
Уведомление:
- Код языка чувствителен к регистру, рекомендуется использовать строчные буквы, например «zh-cn», «en-us» и т. д.
- Название кода языка произвольное, вы можете назвать его как хотите, например, «abc» (рекомендуется использовать стандартный код языка).
использовать этоMyValidation
Класс, чтобы проверить, вы можете добиться перевода текста.
MyValidation::setLangCode("zh-tw"); // 设置语言代码
MyValidation::validate(["var" => 1.0], [
"var" => "Int", // 既没有Alias,也没有>>>,只会翻译错误提示信息模版(对应🌝那行)
]); // 会抛出异常:“var”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|Alias:变量", // 有Alias,除了翻译错误提示信息模版外,还会翻译参数名称(对应🌙那行)
]); // 会抛出异常:“變量”必須是整數
MyValidation::validate(["var" => 1.0], [
"var" => "Int|>>>:变量必须是整数", // 有>>>,会翻译自定义错误描述文本(对应⭐那行)
]); // 会抛出异常:變量必須是整數
Если указан неверный код языка или переведенный текст не найден, то перевод не выполняется и выводится исходный текст.
Приложение — список валидаторов
A.1 Целое число
Все целочисленные валидаторы начинаются с «Int».
Целочисленный валидатор | Пример | иллюстрировать |
---|---|---|
Int | Int | '{{param}}' должен быть целым числом |
IntEq | IntEq:100 | '{{param}}' должен быть равен {{value}} |
IntGt | IntGt:100 | '{{param}}' должен быть больше, чем {{min}} |
IntGe | IntGe:100 | "{{param}}" должен быть больше или равен {{min}} |
IntLt | IntLt:100 | '{{param}}' должно быть меньше {{max}} |
IntLe | IntLe:100 | "{{param}}" должен быть меньше или равен {{max}} |
IntGtLt | IntGtLt:1,100 | '{{param}}' должен быть больше {{min}} и меньше {{max}} |
IntGeLe | IntGeLe:1,100 | "{{param}}" должен быть больше или равен {{min}} меньше или равен {{max}} |
IntGtLe | IntGtLe:1,100 | "{{param}}" должен быть больше {{min}} и меньше или равен {{max}} |
IntGeLt | IntGeLt:1,100 | "{{param}}" должен быть больше или равен {{min}} и меньше {{max}} |
IntIn | IntIn:2,3,5,7,11 | "{{param}}" может принимать только следующие значения: {{valueList}} |
IntNotIn | IntNotIn:2,3,5,7,11 | '{{param}}' не может принимать следующие значения: {{valueList}} |
A.2 Плавающая запятая
Внутренне используйте double для обработки
валидатор с плавающей запятой | Пример | иллюстрировать |
---|---|---|
Float | Float | '{{param}}' должен быть числом с плавающей запятой |
FloatGt | FloatGt:1.0 | '{{param}}' должен быть больше, чем {{min}} |
FloatGe | FloatGe:1.0 | "{{param}}" должен быть больше или равен {{min}} |
FloatLt | FloatLt:1.0 | '{{param}}' должно быть меньше {{max}} |
FloatLe | FloatLe:1.0 | "{{param}}" должен быть меньше или равен {{max}} |
FloatGtLt | FloatGtLt:0,1.0 | '{{param}}' должен быть больше {{min}} и меньше {{max}} |
FloatGeLe | FloatGeLe:0,1.0 | "{{param}}" должен быть больше или равен {{min}} меньше или равен {{max}} |
FloatGtLe | FloatGtLe:0,1.0 | "{{param}}" должен быть больше {{min}} и меньше или равен {{max}} |
FloatGeLt | FloatGeLt:0,1.0 | "{{param}}" должен быть больше или равен {{min}} и меньше {{max}} |
A.3 логический тип
логический валидатор | Пример | иллюстрировать |
---|---|---|
Bool | Bool | Юридические значения:true , false , "true" , "false" (без учета регистра) |
BoolSmart | BoolSmart | Юридические значения:true , false , "true" , "false" , 1 , 0 , "1" , "0" , "yes" , "no" , "y" , "n" (без учета регистра) |
A.4 Строковый тип
Строковый валидатор | Пример | иллюстрировать |
---|---|---|
Str | Str | '{{param}}' должен быть строкой |
StrEq | StrEq:abc | "{{param}}" должен быть равен "{{value}}" |
StrEqI | StrEqI:abc | "{{param}}" должен быть равен "{{value}}" (регистр игнорируется) |
StrNe | StrNe:abc | "{{param}}" не может быть равно "{{value}}" |
StrNeI | StrNeI:abc | "{{param}}" не может быть равно "{{value}}" (без учета регистра) |
StrIn | StrIn:abc,def,g | "{{param}}" может принимать только следующие значения: {{valueList}} |
StrInI | StrInI:abc,def,g | "{{param}}" может принимать только следующие значения: {{valueList}} (без учета регистра) |
StrNotIn | StrNotIn:abc,def,g | '{{param}}' не может принимать следующие значения: {{valueList}} |
StrNotInI | StrNotInI:abc,def,g | '{{param}}' не может принимать следующие значения: {{valueList}} (без учета регистра) |
StrLen | StrLen:8 | Длина '{{param}}' должна быть равна {{length}} |
StrLenGe | StrLenGe:8 | Длина '{{param}}' должна быть больше или равна {{min}} |
StrLenLe | StrLenLe:8 | Длина '{{param}}' должна быть меньше или равна {{max}} |
StrLenGeLe | StrLenGeLe:6,8 | Длина '{{param}}' должна быть между {{min}} - {{max}} |
ByteLen | ByteLen:8 | Длина '{{param}}' (в байтах) должна быть равна {{length}} |
ByteLenGe | ByteLenGe:8 | Длина "{{param}}" (в байтах) должна быть больше или равна {{min}} |
ByteLenLe | ByteLenLe:8 | Длина '{{param}}' (в байтах) должна быть меньше или равна {{max}} |
ByteLenGeLe | ByteLenGeLe:6,8 | Длина '{{param}}' (в байтах) должна быть между {{min}} - {{max}} |
Letters | Letters | '{{param}}' может содержать только буквы |
Alphabet | Alphabet | То же, что буквы |
Numbers | Numbers | "{{param}}" может быть только чистым числом |
Digits | Digits | То же, что числа |
LettersNumbers | LettersNumbers | '{{param}}' может содержать только буквы и цифры |
Numeric | Numeric | '{{param}}' должно быть числовым значением. Обычно используется для обработки больших чисел (числа, превышающие диапазон двойного представления, обычно представляются строками) (обработка больших чисел еще не реализована), если это число в пределах нормального диапазона, вы можете использовать «Int» или « Поплавок для обнаружения |
VarName | VarName | '{{param}}' может содержать только буквы, цифры и знаки подчеркивания и начинаться с буквы или знака подчеркивания. |
"{{param}}" должен быть действительным адресом электронной почты. | ||
Url | Url | "{{param}}" должен быть допустимым URL-адресом. |
Ip | Ip | "{{param}}" должен быть действительным IP-адресом. |
Mac | Mac | "{{param}}" должен быть действительным MAC-адресом. |
Regexp | Regexp:/^abc$/ | Сопоставление регулярных выражений Perl |
A.5 Тип массива
Валидатор массива | Пример | иллюстрировать |
---|---|---|
Arr | Arr | '{{param}}' должен быть массивом |
ArrLen | ArrLen:5 | Длина массива '{{param}}' должна быть равна {{length}} |
ArrLenGe | ArrLenGe:1 | Длина массива "{{param}}" должна быть больше или равна {{min}} |
ArrLenLe | ArrLenLe:9 | Длина массива "{{param}}" должна быть меньше или равна {{max}} |
ArrLenGeLe | ArrLenGeLe:1,9 | Длинный массив "{{param}}" должен быть между {{min}} ~ {{max}} |
А.6 Тип объекта
Валидатор объекта | Пример | иллюстрировать |
---|---|---|
Obj | Obj | '{{param}}' должен быть объектом |
А.7 Тип файла
валидатор типа файла | Пример | иллюстрировать |
---|---|---|
File | File | '{{param}}' должен быть файлом |
FileMaxSize | FileMaxSize:10mb | "{{param}}" должен быть файлом, размер которого не превышает {{size}}. |
FileMinSize | FileMinSize:100kb | "{{param}}" должен быть файлом, размер которого не меньше {{size}}. |
FileImage | FileImage | '{{param}}' должен быть изображением |
FileVideo | FileVideo | '{{param}}' должен быть видеофайлом |
FileAudio | FileAudio | '{{param}}' должен быть аудиофайлом |
FileMimes | FileMimes:mpeg,jpeg,png | '{{param}}' должен быть файлом следующих типов MIME: {{mimes}} |
A.8 Тип даты и времени
валидатор даты и времени | Пример | иллюстрировать |
---|---|---|
Date | Date | '{{param}}' должен соответствовать формату даты ГГГГ-ММ-ДД. |
DateFrom | DateFrom:2017-04-13 | '{{param}}' не должен быть раньше, чем {{from}} |
DateTo | DateTo:2017-04-13 | '{{param}}' должен быть не позднее {{to}} |
DateFromTo | DateFromTo:2017-04-13,2017-04-13 | "{{param}}" должен быть между {{from}} ~ {{to}} |
DateTime | DateTime | '{{param}}' должен соответствовать формату даты и времени ГГГГ-ММ-ДД ЧЧ:мм:сс |
DateTimeFrom | DateTimeFrom:2017-04-13 12:00:00 | '{{param}}' не должен быть раньше, чем {{from}} |
DateTimeTo | DateTimeTo:2017-04-13 12:00:00 | '{{param}}' должен стоять перед {{to}} |
DateTimeFromTo | DateTimeFromTo:2017-04-13 12:00:00,2017-04-13 12:00:00 | "{{param}}" должен быть между {{from}} ~ {{to}} |
A.9 Тип условного суждения
В правиле проверки условные валидаторы должны предшествовать другим валидаторам, и несколько условных валидаторов могут быть объединены в цепочку.
Обратите внимание, что «условием» условного суждения обычно является обнаружениедругой параметрЗначение текущего параметра проверяется другими валидаторами, связанными после валидатора условного суждения.
Условный валидатор | Пример | иллюстрировать |
---|---|---|
If | If:selected | Если значение параметра «выбрано» равно 1, true, «1», «true», «yes» или «y» (строки игнорируют регистр) |
IfNot | IfNot:selected | Если значение параметра "selected" равно 0, false, '0', 'false', 'no' или 'n' (строки игнорируют регистр) |
IfTrue | IfTrue:selected | Если значение параметра «выбрано» равно true или «true» (без учета регистра) |
IfFalse | IfFalse:selected | Если значение параметра «выбрано» равно false или false (без учета регистра) |
IfExist | IfExist:var | если параметр "var" существует |
IfNotExist | IfNotExist:var | Если параметр "var" не существует |
IfIntEq | IfIntEq:var,1 | if (var === 1) |
IfIntNe | IfIntNe:var,2 | if (var !== 2).Следует отметить, что если тип данных условного параметра var не совпадает, то условие If истинно, а для остальных IfIntXx, когда тип данных условного параметра var не совпадает , условие If не выполняется |
IfIntGt | IfIntGt:var,0 | if (var > 0) |
IfIntLt | IfIntLt:var,1 | if (var < 0) |
IfIntGe | IfIntGe:var,6 | if (var >= 6) |
IfIntLe | IfIntLe:var,8 | if (var <= 8) |
IfIntIn | IfIntIn:var,2,3,5,7 | if (in_array(var, [2,3,5,7])) |
IfIntNotIn | IfIntNotIn:var,2,3,5,7 | if (!in_array(var, [2,3,5,7])) |
IfStrEq | IfStrEq:var,waiting | if (var === 'waiting') |
IfStrNe | IfStrNe:var,editing | if (var !== 'editing').Особое внимание: если тип данных условного параметра var не совпадает, то условие If истинно, а для остальных IfStrXx, когда тип данных условного параметра var не совпадает совпадение, если условие не выполняется |
IfStrGt | IfStrGt:var,a | if (var > 'a') |
IfStrLt | IfStrLt:var,z | if (var < 'z') |
IfStrGe | IfStrGe:var,A | if (var >= '0') |
IfStrLe | IfStrLe:var,Z | if (var <= '9') |
IfStrIn | IfStrIn:var,normal,warning,error | if (in_array(var, ['normal', 'warning', 'error'], true)) |
IfStrNotIn | IfStrNotIn:var,warning,error | if (!in_array(var, ['warning', 'error'], true)) |
A.10 Другие валидаторы
Другие валидаторы | Пример | иллюстрировать |
---|---|---|
Required | Required | Параметр для проверки является обязательным. Если валидаторы объединены, за исключением условных валидаторов, должен быть первый валидатор. |
Alias | Псевдоним: имя параметра | Имя параметра в пользовательском тексте подсказки об ошибке (должен быть последний валидатор) |
>>> | >>>: Это настраиваемый текст сообщения об ошибке | Пользовательский текст сообщения об ошибке (выберите один с валидатором псевдонимов, должен быть последним валидатором) |
Пользовательская функция PHP | function() {} | Этот механизм пока не предусмотрен, потому что если вы столкнетесь со сложной проверкой параметров, которая не поддерживается этим инструментом, вы можете напрямую написать PHP-код для его проверки, и вам не нужно проверять его через этот инструмент (иначе вы возьмете снимай штаны и пукай, и больше ничего не сделаешь) |