WebGeeker-Validation: мощный валидатор параметров PHP.

задняя часть PHP Laravel регулярное выражение

WebGeeker-Validation: Мощный валидатор параметров PHP.

адрес проекта:github Облако кода

Используется для проверки правильности параметров запроса интерфейса API.

При реализации API-интерфейса сервера для каждого параметра каждого интерфейса следует проверять, является ли значение допустимым, чтобы избежать неправильного ввода данных в систему. Можно сказать, что эта работа требует много времени и труда, но она должна быть выполнена. Более того, PHP сам по себе является слабо типизированным языком не только для проверки значения, но и для проверки соответствия типа данных, что более сложно.

Этот инструмент предназначен для этой работы, он может эффективно сократить объем кодирования, а код читаем.

Взгляните на следующий код, вы можете получить общее представление об использовании, это не должно быть сложно понять:

$params = $request->query(); // 获取GET参数

// 验证(如果验证不通过,会抛出异常)
Validation::validate($params, [
    "offset" => "IntGe:0",
    "count" => "Required|IntGeLe:1,200",
]);

Он поддерживает проверку нескольких типов данных: целое число, с плавающей запятой, логическое значение, строка, массив, объект, файл, дата и время, может проверять параметры во вложенной структуре данных, а также поддерживает проверку с условным суждением.

1. Введение

1.1 Зачем писать такой инструмент?

Когда я использую фреймворк Laravel, Laravel предоставляет инструмент проверки параметров, но его не очень удобно использовать:

  • Написать класс проверки (наследовать XXX) для каждой проверки, что слишком хлопотно, и в системе будет много-много больше классов; если эти классы повторно использовать в нескольких местах, или для «большего» повторного использования (уменьшить повторяющийся код) , а затем создать множество отношений наследования между этими классами, то обслуживание этих классов само по себе является большой проблемой;
  • У валидаторов есть проблема «полисемии». Например, у него естьsizeВалидатор, который поддерживает проверку различных типов параметров, таких как строки, целые числа, файлы и т. д., для разных типов данных.sizeзначения разные. Это похоже на запоминание английских слов: существует так много английских слов, которые имеют очень много значений и имеют разные значения в разных контекстах. Например, слово «подарок» имеет значение «подарок», «подарок» и «подарок». Больше всего беспокоит такое многозначное слово, я не могу понять, что оно означает, и не могу его запомнить.

Для решения этих проблем и был написан такой инструмент.

1.2 Особенности

  1. Кратко, логика проверки понятна с первого взгляда (см. следующий пример)
  2. Легкий, нет необходимости определять и поддерживать различные классы проверки
  3. У валидатора понятная семантика и нет проблемы «полисемии»
  4. Поддержка проверки регулярного выражения
  5. Поддержка условной проверки
  6. Теоретически он может поддерживать проверку бесконечно вложенных параметров.
  7. Легко выучить и запомнить. Например, все валидаторы для целых чисел начинаются с «Int», все валидаторы с плавающей запятой начинаются с «Float» и так далее. Единственными, которые не соответствуют этому правилу, являются строковые валидаторы, некоторые из них начинаются с «Str», а некоторые не начинаются с «Str», напримерRegexp, Ip, Email, UrlЖдать.
  8. Не привязан ни к какому фреймворку, без каких-либо зависимостей. Вы можете использовать этот инструмент в любом фреймворке, даже если вы не используете фреймворк.
  9. Модульные тесты для каждой функции (всего 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.

Параллельное подключение правил верификации — это не просто отношение «или». Конкретный процесс верификации выглядит следующим образом:

  1. Эти правила проверяются по порядку, и если одно правило проверки проходит успешно, проверка параметра проходит успешно.
  2. Если все правила валидации игнорируются (если условия валидатора не выполнены, или нет требуемого валидатора и параметр не существует, или правил валидации 0), валидация параметра также считается пройденной.
  3. Вышеуказанные два не выполняются, тогда проверка параметра завершается неудачно.

Полностью прояснить эти правила непросто, поэтому не рекомендуется использовать правила проверки параллельно и стараться не проектировать параметры, требующие этого метода проверки.

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}}' может содержать только буквы, цифры и знаки подчеркивания и начинаться с буквы или знака подчеркивания.
Email Email "{{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-код для его проверки, и вам не нужно проверять его через этот инструмент (иначе вы возьмете снимай штаны и пукай, и больше ничего не сделаешь)