Ce face filter_var
filter_var primește o valoare și un filtru. Filtrele de validare (FILTER_VALIDATE_*) returnează valoarea (convertită la tipul potrivit) dacă este corectă, sau false dacă nu este.
Cele mai folosite filtre: FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_INT (cu min_range și max_range), FILTER_VALIDATE_FLOAT, FILTER_VALIDATE_URL, FILTER_VALIDATE_IP și FILTER_VALIDATE_BOOL (acceptă „yes”, „on”, „1”, „true” și opusele lor).
Opțiunile se dau ca tablou: ["options" => [...], "flags" => ...]. Cu FILTER_NULL_ON_FAILURE, o valoare invalidă dă null în loc de false, util la filtrele booleene.
Parametri
| Parametru | Descriere |
|---|---|
$value |
Valoarea verificată. |
$filter |
Filtrul, de exemplu FILTER_VALIDATE_EMAIL. |
$options |
Opțional. Tablou cu options și flags, sau direct un flag. |
Ce returnează
Valoarea validată (convertită, de exemplu în int), sau false (respectiv null cu FILTER_NULL_ON_FAILURE) dacă nu trece filtrul.
Exemple
Exemplul 1: Email și număr întreg
<?php
var_dump(filter_var("ana@exemplu.ro", FILTER_VALIDATE_EMAIL));
var_dump(filter_var("ana@exemplu", FILTER_VALIDATE_EMAIL));
var_dump(filter_var("42", FILTER_VALIDATE_INT));
var_dump(filter_var("4.2", FILTER_VALIDATE_INT));
Rezultat
string(14) "ana@exemplu.ro"
bool(false)
int(42)
bool(false)
Exemplul 2: Interval, zecimale cu virgulă și boolean
<?php
$varsta = filter_var("150", FILTER_VALIDATE_INT, [
"options" => ["min_range" => 1, "max_range" => 120],
]);
var_dump($varsta);
var_dump(filter_var("12,5", FILTER_VALIDATE_FLOAT, ["options" => ["decimal" => ","]]));
var_dump(filter_var("yes", FILTER_VALIDATE_BOOL));
var_dump(filter_var("poate", FILTER_VALIDATE_BOOL, FILTER_NULL_ON_FAILURE));
Rezultat
bool(false)
float(12.5)
bool(true)
NULL
Exemplul 3: Validarea unui formular de contact
Valoarea 0 este un număr valid, dar este „falsă” într-un if. Compară mereu cu === false.
<?php
$_POST = ["email" => "ana@exemplu.ro", "cantitate" => "0", "site" => "dexblog.ro"];
$email = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
$cantitate = filter_var($_POST["cantitate"], FILTER_VALIDATE_INT);
$site = filter_var($_POST["site"], FILTER_VALIDATE_URL);
echo $email === false ? "Email invalid\n" : "Email: $email\n";
echo $cantitate === false ? "Cantitate invalidă\n" : "Cantitate: $cantitate\n";
echo $site === false ? "Adresa site-ului trebuie să înceapă cu http:// sau https://" : "Site: $site";
Rezultat
Email: ana@exemplu.ro
Cantitate: 0
Adresa site-ului trebuie să înceapă cu http:// sau https://
Greșeli frecvente
- Scrii
if (!filter_var($x, FILTER_VALIDATE_INT)). Pentru valoarea validă"0", rezultatul este0, iar condiția o respinge. Compară cu=== false. - Crezi că
FILTER_VALIDATE_URLacceptă doar linkuri sigure. Trec șiftp://...saujavascript://.... Verifică și protocolul cuparse_url. - Folosești
FILTER_SANITIZE_STRING. Este învechit din PHP 8.1 și dăDeprecated. Pentru afișare sigură foloseștehtmlspecialchars.
Comenzi înrudite
filter_input / filter_has_var: Citește o valoare direct din cererea HTTP (GET, POST, cookie) și o validează, într-un singur pas.htmlspecialchars: Transformă caracterele speciale HTML în entități, ca textul să fie afișat în siguranță în pagină.parse_url: Împarte un URL în componente: protocol, domeniu, port, cale, interogare și fragment.isset: Verifică dacă o variabilă există și nu are valoarea null.