Валидаторы значений
Нужно быстро и легко проверить, что переменная содержит, например, действительный адрес электронной почты? Вот тут-то и пригодится Nette\Utils\Validators, статический класс с полезными функциями для проверки значений.
Установка:
Во всех примерах предполагается, что псевдоним уже создан:
Основное использование
Класс имеет ряд методов для проверки значений, таких как isList(), isUnicode(), isEmail(), isUrl() и т.д. для использования в вашем коде:
Он также может проверить, является ли значение ожидаемым типом, который представляет собой строку,
где опции разделены косой чертой |
. Таким образом, мы можем легко
проверить несколько типов с помощью if():
Но это также дает нам возможность создать систему, в которой нам нужно записывать ожидания в виде строк (например, в аннотациях или конфигурации), а затем проверять значения по ним.
Мы также можем поставить запрос assert() на ожидаемые типы, который в случае невыполнения выбрасывает исключение.
Ожидаемые типы
Ожидаемые типы образуют строку, состоящую из одного или нескольких
вариантов, разделенных вертикальной полосой |
, podobně jako se zapisují typy
v PHP (např. 'int|string|bool')
. Также принимается нулевая нотация
?int
.
Массив, в котором все элементы имеют определенный тип, записывается
как int[]
.
За некоторыми типами может следовать двоеточие и длина :length
или диапазон. :[min]..[max]
например, string:10
(строка из 10 байт),
float:10..
(число 10 или более), array:..10
(массив до десяти
элементов) или list:10..20
(список от 10 до 20 элементов), или
регулярное выражение u pattern:[0-9]+
.
Обзор типов и правил:
PHP types | |
---|---|
array |
Для количества элементов может быть задан диапазон. |
bool |
|
float |
Для значения может быть указан диапазон. |
int |
может быть указан диапазон значений. |
null |
|
object |
|
resource |
|
scalar |
int|float|bool|string |
string |
Для длины в байтах может быть указан диапазон. |
callable |
|
iterable |
|
mixed |
|
псевдо-типы | |
list |
индексированный массив, для количества элементов может быть задан диапазон |
none |
пустое значение: '' , null , false |
number |
int|float |
numeric |
число, включая текстовое представление |
numericint |
целое число, включая текстовое представление |
unicode |
UTF-8 строка, может быть указан диапазон длины в символах. |
класс символов (не должен быть пустой строкой) | |
alnum |
все символы буквенно-цифровые |
alpha |
все символы – буквы [A-Za-z] |
digit |
все символы являются цифрами |
lower |
все символы в нижнем регистре [a-z] |
space |
все символы – пробелы |
upper |
все символы в верхнем регистре [A-Z] |
xdigit |
все символы являются шестнадцатеричными цифрами [0-9A-Fa-f] |
проверка синтаксиса | |
pattern |
регулярное выражение, которое должно соответствовать всей строке |
email |
|
identifier |
PHP-идентификатор |
url |
URL |
uri |
URI |
аутентификация среды | |
class |
это существующий класс |
interface |
это существующий интерфейс |
directory |
это существующий каталог |
file |
это существующий файл |
Утверждение
assert($value, string $expected, string
$label='variable'
): void
Проверяет, что значение является одним из ожидаемых
типов, разделенных звездочкой. Если нет, то выбрасывается исключение
Nette\Utils\AssertionException. Слово
variable
в тексте исключения может быть заменено другим параметром
$label
.
assertField(array $array, string|int $key, ?string $expected=null, ?string $label=null): void
Проверяет, что элемент под ключом $key
в поле $array
является одним из ожидаемых типов, разделенных
звездочкой. Если нет, то выбрасывается исключение Nette\Utils\AssertionException. Строка
item '%' in array
в тексте исключения может быть заменена другим
параметром $label
.
Валидаторы
is($value, string $expected): bool
Проверяет, что значение является одним из ожидаемых типов, разделенных звездочкой.
isEmail(mixed $value): bool
Проверяет, является ли значение действительным адресом электронной почты. Он не проверяет, существует ли домен на самом деле, проверяется только синтаксис. Функция также учитывает будущие ДВУ, которые могут быть в юникоде.
isInRange(mixed $value, array $range): bool
Проверяет, находится ли значение в заданном диапазоне
[min, max]
где верхняя или нижняя граница может быть опущена
(null
). Сравнивать можно числа, строки и объекты DateTime.
Если обе границы отсутствуют ([null, null]
) или значение null
,
возвращается false
.
isNone(mixed $value): bool
Проверяет, что значение равно 0
, ''
, false
или
null
.
isNumeric(mixed $value): bool
Проверяет, является ли значение числом или числом, записанным в строке.
isNumericInt(mixed $value): bool
Проверяет, является ли значение целым числом или числом, записанным в строке.
isPhpIdentifier(string $value): bool
Проверяет, является ли значение синтаксически допустимым идентификатором в PHP, например, для имен классов, методов, функций и т.д.
isBuiltinType(string $type): bool
Проверяет, является ли $type
встроенным типом PHP. В противном
случае это имя класса.
isTypeDeclaration(string $type): bool
Проверяет, является ли данное объявление типа синтаксически допустимым.
isClassKeyword(string $type): bool
Проверяет, является ли $type
одним из внутренних типов self
,
parent
, static
.
isUnicode(mixed $value): bool
Проверяет, что значение является допустимой строкой UTF-8.
isUrl(mixed $value): bool
Проверяет, является ли значение действительным URL.
isUri(string $value): bool
Проверяет, является ли значение действительным адресом URI, который фактически представляет собой строку, начинающуюся с синтаксически допустимой схемы.