Preverjevalniki vrednosti
Potrebujete hitro in preprosto preveriti, ali spremenljivka vsebuje na primer veljaven e-poštni naslov? Potem vam bo prišel prav Nette\Utils\Validators, statični razred z uporabnimi funkcijami za preverjanje vrednosti.
Namestitev:
composer require nette/utils
Vsi primeri predpostavljajo, da je definiran naslednji vzdevek razreda:
use Nette\Utils\Validators;
Osnovna uporaba
Razred Validators
ima številne metode za preverjanje vrednosti, kot so isList(), isUnicode(), isEmail(), isUrl() itd., ki jih lahko
uporabite v svoji kodi:
if (!Validators::isEmail($email)) {
throw new InvalidArgumentException;
}
Poleg tega lahko preveri, ali vrednost ustreza tako imenovanim pričakovanim tipom, kar je
niz, v katerem so posamezne možnosti ločene z navpično črto |
. Tako je preverjanje tipov zvez enostavno
z uporabo funkcije if():
if (!Validators::is($val, 'int|string|bool')) {
// ...
}
Prav tako pa vam omogoča, da ustvarite sistem, v katerem je treba pričakovanja zapisati kot nize (na primer v anotacijah ali konfiguraciji) in nato preverjati v skladu z njimi.
Prav tako lahko razglasite trditev, ki vrže izjemo, če ni izpolnjena.
Pričakovani tipi
Pričakovani tipi so niz, sestavljen iz ene ali več različic, ločenih z navpično črto |
, similar to writing
types in PHP (ie. 'int|string|bool')
. Dovoljen je tudi ničelni zapis ?int
.
Polje, kjer so vsi elementi določenega tipa, se zapiše v obliki int[]
.
Nekaterim tipom lahko sledita dvopičje in dolžina :length
ali razpon :[min]..[max]
npr.
string:10
(niz z dolžino 10 bajtov), float:10..
(število 10 in večje), array:..10
(polje z do desetimi elementi) ali list:10..20
(seznam z 10 do 20 elementi), ali regularni izraz za
pattern:[0-9]+
.
Pregled vrst in pravil:
Tipi PHP | |
---|---|
array |
podano je lahko območje števila elementov |
bool |
|
float |
obseg za vrednost je lahko podan |
int |
lahko se navede razpon vrednosti |
null |
|
object |
|
resource |
|
scalar |
int|float|bool|string |
string |
lahko se navede razpon za dolžino v bajtih |
callable |
|
iterable |
|
mixed |
|
psevdotipi | |
list |
indeksirano polje, podan je lahko razpon števila elementov |
none |
prazna vrednost: '' , null , false |
number |
int|float |
numeric |
število, vključno z besedilno predstavitvijo |
numericint |
celo število, vključno z besedilno predstavitvijo |
unicode |
UTF-8 niz, podan je lahko razpon dolžine v znakih |
razred znakov (ne more biti prazen niz) | |
alnum |
vsi znaki so alfanumerični |
alpha |
vsi znaki so črke [A-Za-z] |
digit |
vsi znaki so številke |
lower |
vsi znaki so male črke [a-z] |
space |
vsi znaki so presledki |
upper |
vsi znaki so velike črke [A-Z] |
xdigit |
vsi znaki so šestnajstiške številke [0-9A-Fa-f] |
preverjanje skladnje | |
pattern |
regularni izraz, ki mu mora ustrezati celoten** niz |
email |
Elektronska pošta |
identifier |
PHP identifikator |
url |
URL |
uri |
URI |
potrditev okolja | |
class |
je obstoječi razred |
interface |
je obstoječi vmesnik |
directory |
je obstoječi imenik |
file |
je obstoječa datoteka |
Trditev
assert($value, string $expected, string
$label='variable'
): void
Preveri, ali je vrednost sestavljena iz pričakovanih tipov, ločenih s cevjo. V nasprotnem
primeru vrže izjemo Nette\Utils\AssertionException. Besedo
variable
v sporočilu o izjemi lahko nadomestite s parametrom $label
.
Validators::assert('Nette', 'string:5'); // V REDU
Validators::assert('Lorem ipsum dolor sit', 'string:78');
// AssertionException: The variable expects to be string:78, string 'Lorem ipsum dolor sit' given.
assertField(array $array, string|int $key, ?string $expected=null, ?string $label=null): void
Preveri, ali je element $key
v polju $array
iz pričakovanih
tipov, ločenih s cevjo. V nasprotnem primeru vrže izjemo Nette\Utils\AssertionException. Niz
item '%' in array
v sporočilu o izjemi je mogoče nadomestiti s parametrom $label
.
$arr = ['foo' => 'Nette'];
Validators::assertField($arr, 'foo', 'string:5'); // V REDU
Validators::assertField($arr, 'bar', 'string:15');
// AssertionException: Missing item 'bar' in array.
Validators::assertField($arr, 'foo', 'int');
// AssertionException: The item 'foo' in array expects to be int, string 'Nette' given.
Validatorji
is($value, string $expected): bool
Preveri, ali je vrednost iz pričakovanih tipov, ločenih s cevjo.
Validators::is(1, 'int|float'); // true
Validators::is(23, 'int:0..10'); // false
Validators::is('Nette Framework', 'string:15'); // true, length is 15 bytes
Validators::is('Nette Framework', 'string:8..'); // true
Validators::is('Nette Framework', 'string:30..40'); // false
isEmail(mixed $value): bool
Preveri, ali je vrednost veljaven e-poštni naslov. Ne preveri, ali domena dejansko obstaja, preveri se le sintaksa. Funkcija računa tudi na prihodnje vrhnje domene, ki so lahko tudi v enokodni obliki.
Validators::isEmail('example@nette.org'); // true
Validators::isEmail('example@localhost'); // false
Validators::isEmail('nette'); // false
isInRange(mixed $value, array $range): bool
Preveri, ali je vrednost v danem območju [min, max]
, pri čemer se lahko zgornja ali spodnja meja izpusti
(null
). Primerjajo se lahko številke, nizi in objekti DateTime.
Če manjkata obe meji ([null, null]
) ali je vrednost null
, vrne false
.
Validators::isInRange(5, [0, 5]); // true
Validators::isInRange(23, [null, 5]); // false
Validators::isInRange(23, [5]); // true
Validators::isInRange(1, [5]); // false
isNone(mixed $value): bool
Preveri, ali je vrednost 0
, ''
, false
ali null
.
Validators::isNone(0); // true
Validators::isNone(''); // true
Validators::isNone(false); // true
Validators::isNone(null); // true
Validators::isNone('nette'); // false
isNumeric(mixed $value): bool
Preveri, ali je vrednost število ali število, zapisano v nizu.
Validators::isNumeric(23); // true
Validators::isNumeric(1.78); // true
Validators::isNumeric('+42'); // true
Validators::isNumeric('3.14'); // true
Validators::isNumeric('nette'); // false
Validators::isNumeric('1e6'); // false
isNumericInt(mixed $value): bool
Preveri, ali je vrednost celo število ali celo število, zapisano v nizu.
Validators::isNumericInt(23); // true
Validators::isNumericInt(1.78); // false
Validators::isNumericInt('+42'); // true
Validators::isNumericInt('3.14'); // false
Validators::isNumericInt('nette'); // false
isPhpIdentifier(string $value): bool
Preveri, ali je vrednost sintaktično veljaven identifikator v PHP, na primer za imena razredov, metod, funkcij itd.
Validators::isPhpIdentifier(''); // false
Validators::isPhpIdentifier('Hello1'); // true
Validators::isPhpIdentifier('1Hello'); // false
Validators::isPhpIdentifier('one two'); // false
isBuiltinType(string $type): bool
Ugotovi, ali je $type
vgrajeni tip PHP. V nasprotnem primeru je ime razreda.
Validators::isBuiltinType('string'); // true
Validators::isBuiltinType('Foo'); // false
isTypeDeclaration(string $type): bool
Preveri, ali je deklaracija tipa skladenjsko pravilna.
Validators::isTypeDeclaration('?string'); // true
Validators::isTypeDeclaration('string|null'); // true
Validators::isTypeDeclaration('Foo&Bar'); // true
Validators::isTypeDeclaration('(A&C)|null'); // true
Validators::isTypeDeclaration('?string|null'); // false
Validators::isTypeDeclaration('|foo'); // false
Validators::isTypeDeclaration('(A|B)'); // false
isClassKeyword(string $type): bool
Določi, ali je $type
eden od notranjih tipov self
, parent
, static
.
Validators::isClassKeyword('self'); // true
Validators::isClassKeyword('Foo'); // false
isUnicode(mixed $value): bool
Preveri, ali je vrednost veljavni niz UTF-8.
Validators::isUnicode('nette'); // true
Validators::isUnicode(''); // true
Validators::isUnicode("\xA0"); // false
isUrl(mixed $value): bool
Preveri, ali je vrednost veljaven naslov URL.
Validators::isUrl('https://nette.org:8080/path?query#fragment'); // true
Validators::isUrl('http://localhost'); // true
Validators::isUrl('http://192.168.1.1'); // true
Validators::isUrl('http://[::1]'); // true
Validators::isUrl('http://user:pass@nette.org'); // false
Validators::isUrl('nette.org'); // false
isUri(string $value): bool
Preveri, ali je vrednost veljaven naslov URI, torej dejansko niz, ki se začne s sintaktično veljavno shemo.
Validators::isUri('https://nette.org'); // true
Validators::isUri('mailto:gandalf@example.org'); // true
Validators::isUri('nette.org'); // false