Validátory hodnot
Potřebujete rychle a jednoduše ověřit, že v proměnné je například platná e-mailová adresa? To se vám bude hodit Nette\Utils\Validators, statická třída s užitečnými funkcemi pro validaci hodnot.
Instalace:
Všechny příklady předpokládají vytvořený alias:
Základní použití
Třída disponuje řadou metod pro kontrolu hodnot, jako třeba isList(), isUnicode(), isEmail(), isUrl() atd. pro využití ve vašem kódu:
Dále umí oveřit, zda hodnota je tzv. očekávaný typy, což je řetězec, kde se
jednotlivé možnosti oddělují svislítkem |
. Můžeme tak snadno oveřit více typů pomocí if():
Ale také nám to dává možnost vytvořit si systém, kde je potřeba očekávání zapisovat jako řetězce (například v anotacích nebo konfiguraci) a pak podle nich ověřovat hodnoty.
Na očekávané typy lze dát i požadavek assert(), který když není splněn, tak se vyhodí výjimka.
Očekávané typy
Očekávané typy tvoří řetězec skládající se z jedné čí více variant oddělených svislítkem |
,
podobně jako se zapisují typy v PHP (např. 'int|string|bool')
. Akceptuje se i nullable zápis
?int
.
Pole, kde všechny prvky jsou určitého typu, se zapíše ve tvaru int[]
.
Za některými typy může následovat dvojtečka a délka :length
nebo rozsah :[min]..[max]
, např.
string:10
(řetězec o délce 10 bytů), float:10..
(číslo 10 a větší), array:..10
(pole do deseti prvků) nebo list:10..20
(list s 10 až 20 prvky), případně regulární výraz u
pattern:[0-9]+
.
Přehled typů a pravidel:
PHP typy | |
---|---|
array |
lze uvést rozsah pro počet prvků |
bool |
|
float |
lze uvést rozsah pro hodnotu |
int |
lze uvést rozsah pro hodnotu |
null |
|
object |
|
resource |
|
scalar |
int|float|bool|string |
string |
lze uvést rozsah pro délku v bajtech |
callable |
|
iterable |
|
mixed |
|
pseudo-typy | |
list |
indexované pole, lze uvést rozsah pro počet prvků |
none |
prázdná hodnota: '' , null , false |
number |
int|float |
numeric |
číslo včetně textové reprezentace |
numericint |
celé číslo včetně textové reprezentace |
unicode |
UTF-8 řetězec, lze uvést rozsah pro délku ve znacích |
znaková třída (nesmí být prázdný řetězec) | |
alnum |
všechny znaky jsou alfanumerické |
alpha |
všechny znaky jsou písmena [A-Za-z] |
digit |
všechny znaky jsou číslice |
lower |
všechny znaky jsou malá písmena [a-z] |
space |
všechny znaky jsou mezery |
upper |
všechny znaky jsou velká písmena [A-Z] |
xdigit |
všechny znaky jsou hexadecimální číslice [0-9A-Fa-f] |
ověření syntaxe | |
pattern |
regulární výraz, kterému musí odpovídat celý řetězec |
email |
|
identifier |
PHP identifikátor |
url |
URL |
uri |
URI |
ověřování prostředí | |
class |
je existující třída |
interface |
je existující rozhraní |
directory |
je existující adresář |
file |
je existující soubor |
Asserce
assert($value, string $expected, string
$label='variable'
): void
Ověřuje, že hodnota je jedním z očekávaných typů oddělených svislítkem. Pokud ne,
vyhodí výjimku Nette\Utils\AssertionException.
Slovo variable
v textu výjimky lze nahradit za jiné parametrem $label
.
assertField(array $array, string|int $key, ?string $expected=null, ?string $label=null): void
Ověřuje, zda prvek pod klíčem $key
v poli $array
je jedním z očekávaných typů oddělených svislítkem. Pokud ne, vyhodí výjimku Nette\Utils\AssertionException. Řetězec
item '%' in array
v textu výjimky lze nahradit za jiný parametrem $label
.
Validátory
is($value, string $expected): bool
Ověří, zda hodnota je jedním z očekávaných typů oddělených svislítkem.
isEmail(mixed $value): bool
Ověří, zda je hodnota platná e-mailová adresa. Neověřuje se, zda doména skutečně existuje, ověřuje se pouze syntaxe. Funkce počítá i s budoucími TLD, které mohou být i v unicode.
isInRange(mixed $value, array $range): bool
Ověří, zda je hodnota v daném rozsahu [min, max]
, kde horní nebo spodní hranici můžeme vynechat
(null
). Lze porovnávat čísla, řetězce a objekty DateTime.
Pokud chybí obě hranice ([null, null]
) nebo je hodnota null
, vrací false
.
isNone(mixed $value): bool
Ověří, zda je hodnota 0
, ''
, false
or null
.
isNumeric(mixed $value): bool
Ověří, zda je hodnota číslo nebo číslo zapsané v řetězci.
isNumericInt(mixed $value): bool
Ověří, zda je hodnota celé číslo nebo číslo zapsané v řetězci.
isPhpIdentifier(string $value): bool
Ověří, zda je hodnota syntakticky platný identifikátor v PHP, například pro názvy tříd, metod, funkcí apod.
isBuiltinType(string $type): bool
Zjistí, zda je $type
vestavěný typ PHP. V opačném případě jde o název třídy.
isTypeDeclaration(string $type): bool
Checks whether the given type declaration is syntactically valid.
isClassKeyword(string $type): bool
Zjistí, zda je $type
jedním z interních typů self
, parent
, static
.
isUnicode(mixed $value): bool
Ověří, zda je hodnota platný UTF-8 string.
isUrl(mixed $value): bool
Ověří, zda je hodnota platná URL adresa.
isUri(string $value): bool
Ověří, zda je hodnota platná URI adresa, tedy vlastně řetězec začínající syntakticky platným schématem.