Επικυρωτές τιμών

Χρειάζεται να επαληθεύσετε γρήγορα και εύκολα ότι μια μεταβλητή περιέχει, για παράδειγμα, μια έγκυρη διεύθυνση e-mail; Τότε θα σας φανεί χρήσιμη η Nette\Utils\Validators, μια στατική κλάση με χρήσιμες συναρτήσεις για την επικύρωση τιμών.

Εγκατάσταση:

composer require nette/utils

Όλα τα παραδείγματα προϋποθέτουν ότι έχει δημιουργηθεί ένα ψευδώνυμο:

use Nette\Utils\Validators;

Βασική χρήση

Η κλάση διαθέτει πολλές μεθόδους για τον έλεγχο τιμών, όπως isList(), isUnicode(), isEmail(), isUrl() κ.λπ. για χρήση στον κώδικά σας:

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

Επιπλέον, μπορεί να επαληθεύσει εάν μια τιμή είναι ένας από τους λεγόμενους αναμενόμενους τύπους, που είναι μια συμβολοσειρά όπου οι μεμονωμένες επιλογές διαχωρίζονται με κάθετο |. Μπορούμε έτσι εύκολα να επαληθεύσουμε πολλούς τύπους χρησιμοποιώντας το is():

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

Αλλά μας δίνει επίσης τη δυνατότητα να δημιουργήσουμε ένα σύστημα όπου οι προσδοκίες πρέπει να γράφονται ως συμβολοσειρές (για παράδειγμα, σε annotations ή διαμόρφωση) και στη συνέχεια να επαληθεύουμε τις τιμές σύμφωνα με αυτές.

Για τους αναμενόμενους τύπους, μπορεί επίσης να τεθεί μια απαίτηση assert(), η οποία, εάν δεν πληρούται, δημιουργεί μια εξαίρεση.

Αναμενόμενοι τύποι

Οι αναμενόμενοι τύποι αποτελούν μια συμβολοσειρά που αποτελείται από μία ή περισσότερες παραλλαγές διαχωρισμένες με κάθετο |, παρόμοια με τον τρόπο που γράφονται οι τύποι στην PHP (π.χ. 'int|string|bool'). Η nullable σημειογραφία ?int είναι επίσης αποδεκτή.

Ένας πίνακας όπου όλα τα στοιχεία είναι συγκεκριμένου τύπου γράφεται με τη μορφή int[].

Μετά από ορισμένους τύπους μπορεί να ακολουθεί διπλή τελεία και μήκος :length ή εύρος :[min]..[max], π.χ. string:10 (συμβολοσειρά μήκους 10 bytes), float:10.. (αριθμός 10 και μεγαλύτερος), array:..10 (πίνακας έως δέκα στοιχείων) ή list:10..20 (λίστα με 10 έως 20 στοιχεία), ή μια κανονική έκφραση για pattern:[0-9]+.

Επισκόπηση τύπων και κανόνων:

Τύποι PHP
array μπορεί να καθοριστεί εύρος για τον αριθμό των στοιχείων
bool  
float μπορεί να καθοριστεί εύρος για την τιμή
int μπορεί να καθοριστεί εύρος για την τιμή
null  
object  
resource  
scalar int|float|bool|string
string μπορεί να καθοριστεί εύρος για το μήκος σε bytes
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 E-mail
identifier αναγνωριστικό PHP
url URL
uri URI
έλεγχος περιβάλλοντος
class είναι υπάρχουσα κλάση
interface είναι υπάρχουσα διεπαφή
directory είναι υπάρχων κατάλογος
file είναι υπάρχον αρχείο

Ασέρσεις

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

Επαληθεύει ότι η τιμή είναι ένας από τους αναμενόμενους τύπους που διαχωρίζονται με κάθετο. Εάν όχι, δημιουργεί μια εξαίρεση Nette\Utils\AssertionException. Η λέξη variable στο κείμενο της εξαίρεσης μπορεί να αντικατασταθεί με άλλη χρησιμοποιώντας την παράμετρο $label.

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

Επαληθεύει εάν το στοιχείο με το κλειδί $key στον πίνακα $array είναι ένας από τους αναμενόμενους τύπους που διαχωρίζονται με κάθετο. Εάν όχι, δημιουργεί μια εξαίρεση Nette\Utils\AssertionException. Η συμβολοσειρά item '%' in array στο κείμενο της εξαίρεσης μπορεί να αντικατασταθεί με άλλη χρησιμοποιώντας την παράμετρο $label.

$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.

Επικυρωτές

is ($value, string $expected)bool

Επαληθεύει εάν η τιμή είναι ένας από τους αναμενόμενους τύπους που διαχωρίζονται με κάθετο.

Validators::is(1, 'int|float');  // true
Validators::is(23, 'int:0..10'); // false
Validators::is('Nette Framework', 'string:15');     // true, το μήκος είναι 15 bytes
Validators::is('Nette Framework', 'string:8..');    // true
Validators::is('Nette Framework', 'string:30..40'); // false

isEmail (mixed $value): bool

Επαληθεύει εάν η τιμή είναι μια έγκυρη διεύθυνση e-mail. Δεν επαληθεύεται εάν ο τομέας υπάρχει πραγματικά, επαληθεύεται μόνο η σύνταξη. Η συνάρτηση λαμβάνει υπόψη και μελλοντικά TLD, τα οποία μπορεί να είναι και σε unicode.

Validators::isEmail('example@nette.org'); // true
Validators::isEmail('example@localhost'); // false
Validators::isEmail('nette');             // false

isInRange (mixed $value, array $range)bool

Επαληθεύει εάν η τιμή βρίσκεται στο δεδομένο εύρος [min, max], όπου το άνω ή το κάτω όριο μπορεί να παραλειφθεί (null). Μπορούν να συγκριθούν αριθμοί, συμβολοσειρές και αντικείμενα DateTime.

Εάν λείπουν και τα δύο όρια ([null, null]) ή η τιμή είναι null, επιστρέφει 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

Επαληθεύει εάν η τιμή είναι 0, '', false ή null.

Validators::isNone(0); // true
Validators::isNone(''); // true
Validators::isNone(false); // true
Validators::isNone(null); // true
Validators::isNone('nette'); // false

isNumeric (mixed $value)bool

Επαληθεύει εάν η τιμή είναι αριθμός ή αριθμός γραμμένος σε συμβολοσειρά.

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

Επαληθεύει εάν η τιμή είναι ακέραιος αριθμός ή αριθμός γραμμένος σε συμβολοσειρά.

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

Επαληθεύει εάν η τιμή είναι ένα συντακτικά έγκυρο αναγνωριστικό στην PHP, για παράδειγμα για ονόματα κλάσεων, μεθόδων, συναρτήσεων κ.λπ.

Validators::isPhpIdentifier('');        // false
Validators::isPhpIdentifier('Hello1');  // true
Validators::isPhpIdentifier('1Hello');  // false
Validators::isPhpIdentifier('one two'); // false

isBuiltinType (string $type)bool

Ελέγχει εάν το $type είναι ενσωματωμένος τύπος της PHP. Διαφορετικά, είναι όνομα κλάσης.

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

isTypeDeclaration (string $type)bool

Ελέγχει εάν η δεδομένη δήλωση τύπου είναι συντακτικά έγκυρη.

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

Ελέγχει εάν το $type είναι ένας από τους εσωτερικούς τύπους self, parent, static.

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

isUnicode (mixed $value)bool

Επαληθεύει εάν η τιμή είναι μια έγκυρη συμβολοσειρά UTF-8.

Validators::isUnicode('nette'); // true
Validators::isUnicode('');      // true
Validators::isUnicode("\xA0");  // false

isUrl (mixed $value): bool

Επαληθεύει εάν η τιμή είναι μια έγκυρη διεύθυνση 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

Επαληθεύει εάν η τιμή είναι μια έγκυρη διεύθυνση URI, δηλαδή ουσιαστικά μια συμβολοσειρά που ξεκινά με ένα συντακτικά έγκυρο σχήμα.

Validators::isUri('https://nette.org');           // true
Validators::isUri('mailto:gandalf@example.org');  // true
Validators::isUri('nette.org');                   // false
έκδοση: 4.0