Értékellenőrzők

Gyorsan és egyszerűen szeretné ellenőrizni, hogy egy változó tartalmaz-e például érvényes e-mail címet? Akkor jól fog jönni a Nette\Utils\Validators, egy statikus osztály, amely hasznos függvényeket tartalmaz az értékek érvényesítéséhez.

Telepítés:

composer require nette/utils

Minden példa feltételezi, hogy a következő osztály alias van definiálva:

use Nette\Utils\Validators;

Alapvető használat

A Validators osztály számos módszerrel rendelkezik az értékek érvényesítésére, mint például az isList(), isUnicode(), isEmail(), isUrl(), stb., amelyeket a kódodban használhatsz:

if (!Validators::isEmail($email)) {
	throw new InvalidArgumentException;
}

Továbbá képes ellenőrizni, hogy az érték megfelel-e az úgynevezett elvárt típusoknak, ami egy olyan karakterlánc, amelyben az egyes opciókat függőleges vonallal | választják el. Ez megkönnyíti az unió típusok ellenőrzését az if() segítségével:

if (!Validators::is($val, 'int|string|bool')) {
	// ...
}

De lehetőséget ad arra is, hogy olyan rendszert hozzunk létre, ahol az elvárásokat stringként kell leírni (például annotációkban vagy konfigurációban), majd ezek szerint ellenőrizni.

Olyan állítást is deklarálhatsz, ami kivételt dob, ha nem teljesül.

Várható típusok

Az elvárt típusok egy vagy több, függőleges vonallal elválasztott változatból álló karakterlánc |, similar to writing types in PHP (ie. 'int|string|bool'). A nullázható jelölés is megengedett ?int.

Egy olyan tömböt, amelynek minden eleme egy bizonyos típusba tartozik, a int[] formában írunk le.

Egyes típusokat kettőspont és a hossz :length vagy a tartomány követheti. :[min]..[max], pl. string:10 (10 bájt hosszúságú karakterlánc), float:10.. (10-es és annál nagyobb szám), array:..10 (legfeljebb tíz elemű tömb) vagy list:10..20 (10–20 elemű lista), vagy egy reguláris kifejezés a következőre pattern:[0-9]+.

A típusok és szabályok áttekintése:

PHP típusok
array az elemek számának tartománya megadható.
bool  
float értéktartományt lehet megadni.
int az érték tartománya megadható.
null  
object  
resource  
scalar int|float|bool|string
string meg lehet adni a bájtban megadott hossz tartományt.
callable  
iterable  
mixed  
pszeudotípusok
list indexelt tömb, az elemek számának tartománya megadható.
none üres érték: '', null, false
number int\ float
numeric szám, beleértve a szöveges megjelenítést is  
numericint egész szám, beleértve a szöveges ábrázolást is.  
unicode UTF-8 karakterlánc, megadható a karakterekben kifejezett hosszúság tartománya.  
karakterosztály (nem lehet üres karakterlánc)  
alnum minden karakter alfanumerikus  
alpha minden karakter betű [A-Za-z]  
digit minden karakter számjegy  
lower minden karakter kisbetűs betű [a-z]  
space minden karakter szóköz  
upper minden karakter nagybetűs betű [A-Z]  
xdigit minden karakter hexadecimális számjegyek [0-9A-Fa-f]  
syntax validation  
pattern egy reguláris kifejezés, amelynek a teljes sztringnek meg kell felelnie.  
email Email  
identifier PHP azonosító  
url URL  
uri URI  
környezeti érvényesítés  
class létezik osztály  
interface létező interfész  
directory létező könyvtár  
file létező fájl  

Állítás

assert($value, string $expected, string $label='variable')void

Ellenőrzi, hogy az érték a pipával elválasztott elvárt típusokból áll-e. Ha nem, akkor kivételt dob Nette\Utils\AssertionException. A kivételüzenetben a variable szó helyettesíthető 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 $array tömb $key eleme a tömbben csővel elválasztott, elvárt típusokból áll. Ha nem, akkor kivételt dob Nette\Utils\AssertionException. A kivételüzenetben szereplő item '%' in array karakterláncot a $label paraméterrel lehet helyettesíteni.

$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 pipával elválasztott elvárt típusokból áll-e.

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

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 szintaxisát ellenőrzi. A funkció számol a jövőbeli TLD-kkel is, amelyek szintén lehetnek unicode-ban.

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 tartományban van-e. [min, max], ahol a felső vagy alsó határérték elhagyható (null). Számok, karakterláncok és DateTime objektumok összehasonlíthatók.

Ha mindkét határ hiányzik ([null, null]), vagy az érték null, akkor a false értéket adja 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.

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 egy szám vagy egy karakterláncba írt 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 vagy egy karakterláncba írt 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 egy szintaktikailag érvényes azonosító-e a PHP-ben, például osztályok, metódusok, függvények stb. nevei esetében.

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 PHP beépített típus-e. Ellenkező esetben az osztály neve.

Validators::isBuiltinType('string'); // true
Validators::isBuiltinType('Foo');    // false

isTypeDeclaration(string $type)bool

Ellenőrzi, hogy a típusdeklaráció szintaktikailag helyes-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 egyike-e a self, parent, static belső típusoknak.

Validators::isClassKeyword('self'); // true
Validators::isClassKeyword('Foo');  // false

isUnicode(mixed $value): bool

Ellenőrzi, hogy az érték érvényes UTF-8 karakterlánc-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 valóban egy szintaktikailag érvényes sémával kezdődő karakterlánc.

Validators::isUri('https://nette.org');           // true
Validators::isUri('mailto:gandalf@example.org');  // true
Validators::isUri('nette.org');                   // false
verzió: 4.0