Érték validátorok
Gyorsan és egyszerűen kell ellenőriznie, hogy egy változóban például érvényes e-mail cím van-e? Ehhez hasznos lesz a Nette\Utils\Validators, egy statikus osztály hasznos függvényekkel az értékek validálásához.
Telepítés:
composer require nette/utils
Minden példa feltételezi a létrehozott aliast:
use Nette\Utils\Validators;
Alapvető használat
Az osztály számos metódussal rendelkezik az értékek ellenőrzésére, mint például a isUnicode(), isEmail(), isUrl() stb., amelyeket a kódjában használhat:
if (!Validators::isEmail($email)) {
	throw new InvalidArgumentException;
}
Továbbá képes ellenőrizni, hogy az érték ún. várt típusok-e, ami egy string, ahol az
egyes lehetőségeket függőleges vonal | választja el. Így könnyen ellenőrizhetünk több típust a is() segítségével:
if (!Validators::is($val, 'int|string|bool')) {
	// ...
}
De ez lehetőséget ad arra is, hogy olyan rendszert hozzunk létre, ahol az elvárásokat stringként kell megadni (például annotációkban vagy konfigurációban), majd ezek alapján ellenőrizni az értékeket.
A várt típusokra követelményt is állíthatunk a assert() segítségével, amely ha nem teljesül, kivételt dob.
Várt típusok
A várt típusok egy stringet alkotnak, amely egy vagy több, függőleges vonallal | elválasztott változatból
áll, hasonlóan ahhoz, ahogy a típusokat PHP-ban írják (pl. 'int|string|bool'). Elfogadott a nullable jelölés
?int is.
Egy tömb, ahol minden elem egy bizonyos típusú, int[] formában íródik.
Néhány típus után kettőspont és hossz :length vagy tartomány :[min]..[max] következhet, pl.
string:10 (10 bájt hosszúságú string), float:10.. (10-es vagy nagyobb szám),
array:..10 (legfeljebb tíz elemű tömb) vagy list:10..20 (10–20 elemű lista), illetve reguláris
kifejezés a pattern:[0-9]+ esetén.
Típusok és szabályok áttekintése:
| PHP típusok | |
|---|---|
| array | megadható tartomány az elemek számára | 
| bool | |
| float | megadható tartomány az értékre | 
| int | megadható tartomány az értékre | 
| null | |
| object | |
| resource | |
| scalar | int|float|bool|string | 
| string | megadható tartomány a hosszra bájtokban | 
| callable | |
| iterable | |
| mixed | |
| pszeudo-típusok | |
| list | indexelt tömb, megadható tartomány az elemek számára | 
| none | üres érték: '',null,false | 
| number | int|float | 
| numeric | szám, beleértve a szöveges reprezentációt | 
| numericint | egész szám, beleértve a szöveges reprezentációt | 
| unicode | UTF-8 string, megadható tartomány a hosszra karakterekben | 
| karakterosztály (nem lehet üres string) | |
| alnum | minden karakter alfanumerikus | 
| alpha | minden karakter betű [A-Za-z] | 
| digit | minden karakter számjegy | 
| lower | minden karakter kisbetű [a-z] | 
| space | minden karakter szóköz | 
| upper | minden karakter nagybetű [A-Z] | 
| xdigit | minden karakter hexadecimális számjegy [0-9A-Fa-f] | 
| szintaxis ellenőrzése | |
| pattern | reguláris kifejezés, amelynek a teljes stringnek meg kell felelnie | 
| email | |
| identifier | PHP azonosító | 
| url | URL | 
| uri | URI | 
| környezet ellenőrzése | |
| class | létező osztály | 
| interface | létező interfész | 
| directory | létező könyvtár | 
| file | létező fájl | 
Assertok
assert ($value, string $expected, string
$label='variable'): void
Ellenőrzi, hogy az érték a függőleges vonallal elválasztott várt típusok egyike-e. Ha
nem, Nette\Utils\AssertionException kivételt
dob. A variable szó a kivétel szövegében helyettesíthető mással a $label paraméterrel.
Validators::assert('Nette', 'string:5'); // OK
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
Ellenőrzi, hogy a $key kulcs alatti elem a $array tömbben a függőleges vonallal elválasztott várt típusok egyike-e. Ha nem, Nette\Utils\AssertionException kivételt dob. Az
item '%' in array string a kivétel szövegében helyettesíthető mással a $label paraméterrel.
$arr = ['foo' => 'Nette'];
Validators::assertField($arr, 'foo', 'string:5'); // OK
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.
Validátorok
is ($value, string $expected): bool
Ellenőrzi, hogy az érték a függőleges vonallal elválasztott várt típusok egyike-e.
Validators::is(1, 'int|float');  // true
Validators::is(23, 'int:0..10'); // false
Validators::is('Nette Framework', 'string:15');     // true, a hossz 15 bájt
Validators::is('Nette Framework', 'string:8..');    // true
Validators::is('Nette Framework', 'string:30..40'); // false
isEmail (mixed $value): bool
Ellenőrzi, hogy az érték érvényes e-mail cím-e. Nem ellenőrzi, hogy a domain valóban létezik-e, csak a szintaxist ellenőrzi. A funkció számol a jövőbeli TLD-kkel is, amelyek unicode-ban is lehetnek.
Validators::isEmail('example@nette.org'); // true
Validators::isEmail('example@localhost'); // false
Validators::isEmail('nette');             // false
isInRange (mixed $value, array $range): bool
Ellenőrzi, hogy az érték a megadott [min, max] tartományban van-e, ahol a felső vagy alsó határt
elhagyhatjuk (null). Összehasonlíthatók számok, stringek és DateTime objektumok.
Ha mindkét határ hiányzik ([null, null]) vagy az érték null, false-t ad vissza.
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
Ellenőrzi, hogy az érték 0, '', false vagy null-e.
Validators::isNone(0); // true
Validators::isNone(''); // true
Validators::isNone(false); // true
Validators::isNone(null); // true
Validators::isNone('nette'); // false
isNumeric (mixed $value): bool
Ellenőrzi, hogy az érték szám-e vagy stringben megadott szám.
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
Ellenőrzi, hogy az érték egész szám-e vagy stringben megadott egész szám.
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
Ellenőrzi, hogy az érték szintaktikailag érvényes PHP azonosító-e, például osztály-, metódus-, függvénynevekhez stb.
Validators::isPhpIdentifier('');        // false
Validators::isPhpIdentifier('Hello1');  // true
Validators::isPhpIdentifier('1Hello');  // false
Validators::isPhpIdentifier('one two'); // false
isBuiltinType (string $type): bool
Megállapítja, hogy a $type beépített PHP típus-e. Ellenkező esetben osztálynév.
Validators::isBuiltinType('string'); // true
Validators::isBuiltinType('Foo');    // false
isTypeDeclaration (string $type): bool
Ellenőrzi, hogy a megadott típusdeklaráció szintaktikailag érvényes-e.
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
Megállapítja, hogy a $type a self, parent, static belső típusok
egyike-e.
Validators::isClassKeyword('self'); // true
Validators::isClassKeyword('Foo');  // false
isUnicode (mixed $value): bool
Ellenőrzi, hogy az érték érvényes UTF-8 string-e.
Validators::isUnicode('nette'); // true
Validators::isUnicode('');      // true
Validators::isUnicode("\xA0");  // false
isUrl (mixed $value): bool
Ellenőrzi, hogy az érték érvényes URL cím-e.
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
Ellenőrzi, hogy az érték érvényes URI cím-e, azaz egy szintaktikailag érvényes sémával kezdődő string.
Validators::isUri('https://nette.org');           // true
Validators::isUri('mailto:gandalf@example.org');  // true
Validators::isUri('nette.org');                   // false