filter_var în PHP

Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.

Sintaxă
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed

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 este 0, iar condiția o respinge. Compară cu === false.
  • Crezi că FILTER_VALIDATE_URL acceptă doar linkuri sigure. Trec și ftp://... sau javascript://.... Verifică și protocolul cu parse_url.
  • Folosești FILTER_SANITIZE_STRING. Este învechit din PHP 8.1 și dă Deprecated. Pentru afișare sigură folosește htmlspecialchars.

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.