Formular Validierung in PHP mit der filter_var Funktion

Die offizielle Beschreibung der Funktion filter_var unter http://php.net/manual/de/function.filter-var.php ist mit dem Satz „filter_var – Filtern einer Variablen durch einen spezifischen Filter“ doch eher ungenügend beschrieben, da die Funktion so viel mehr kann.

Die Funktion wird wie folgt aufgerufen:

mixed filter_var ( mixed $variable [, int $filter [, mixed $options ]] )

Parameter:

$variable Wert der gefiltert werden soll. Arrays werden rekursiv gefiltert.
$filter ID des zu benutztenden Filters. Standard ist FILTER_SANITIZE_STRING.
$options Assoziatives Array mit Optionen oder bitweise Disjunktion von Flags. Wenn der Filter Optionen akzeptiert, können Flags auch im „flags“ Feld des Arrays angegeben werden. Für „callback“ Filter sollte der callback-Typ angegeben werden.

Return: Gibt die gefilterten Daten zurück oder FALSE wenn fehlgeschlagen.

Als Filter können die folgenden Werte verwendet werden:

Filter für die Validierung:

Name Beschreibung

FILTER_VALIDATE_BOOLEAN Return TRUE für „1“, „true“, „on“ und „yes“, FALSE für „0“, „false“, „off“, „no“, und „“, für alles andere ist NULL der Rückgabewert
FILTER_VALIDATE_EMAIL Email Validierung. Gibt die E-Mail Adresse zurück oder FALSE wenn fehlgeschlagen.
FILTER_VALIDATE_FLOAT Float Validierung. Gibt einen float Wert zurück oder FALSE wenn fehlgeschlagen.
FILTER_VALIDATE_INT Integer Validierung. Gibt einen int Wert zurück oder FALSE wenn fehlgeschlagen. Optional kann noch eine Range festgelegt werden.
FILTER_VALIDATE_IP IP Adress Prüfung. Optional kann hier auf IPv4, IPv6 oder nur im Internet geroutete IP Adressen gefiltert werden.
FILTER_VALIDATE_REGEXP Perl compatible Regular-Expression Validierung. Kann man auch machen, wenn man dem regulären Ausdruck vertraut 🙂
FILTER_VALIDATE_URL URL Validierung. Optional können hier die notwendigen URL Elemente wie z.B. FILTER_FLAG_SCHEME_REQUIRED angegeben werden.

Neben den Filtern für die Validierung gibt es noch Sanitize Filter und die Möglichkeit eine eigene Callback Funktion zum Filtern der Daten anzugeben. Diese Filter möchte ich hier aber nicht weiter vertiefen und daher hier die Liste der Filter der Vollständigkeit halber.
FILTER_SANITIZE_EMAIL, FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_MAGIC_QUOTES, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_SANITIZE_NUMBER_INT, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_SANITIZE_STRIPPED, FILTER_SANITIZE_URL, FILTER_UNSAFE_RAW, FILTER_CALLBACK

Hier noch ein paar Beispiele für die Nutzung

Validierung eine E-Mail Adresse mit Hilfe der Funktion filter_var:

if (filter_var(mail@host.com', FILTER_VALIDATE_EMAIL)) { 
    echo 'VALID'; 
} else {
    echo 'NOT VALID';
}

Validierung eine URL Adresse mit Hilfe der Funktion filter_var:

if(!filter_var($url, FILTER_VALIDATE_URL)) {
  echo "URL is not valid"; 
} else {
  echo "URL is valid";
}

Prüfung, ob es sich um eine private IP Adresse handelt mit Hilfe der Funktion filter_var:

function is_private_ip($ip) { 
    return !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE); 
}

Prüfung einer Variable, mit Hilfe eine Callback Funktion auf die Länge eines Strings

function min10($str){
   if (strlen ($str) < 10) return false;
   return $str;
} 

echo filter_var("hello world",FILTER_CALLBACK,array("options"=>" min10"));
// returns hello world, because the string is 11 chars long

Bisher habe ich immer wieder auf eigene Reguläre Ausdrücke oder andere Libs zur Validierung verwendet, die mir nie so 100% zugesagt haben. Aber seit dir Funktion filter_var in PHP 5 existiert, ist das Validieren von Eingabedaten doch deutlich einfacher geworden und kostet wesentlich weniger Zeit bei der Entwicklung. Damit ist für mich jedenfalls das Problem der Validierung von Eingabedaten (vor allem bei der Validierung von E-Mail Adessen und URLs) erst mal gelöst und ich kann mich wieder anderen Themen widmen.

Ergänzung:
Neben der filter_var Funktion, gibt es noch ein paar ähnliche Funktionen.

filter_var_array() Nimmt mehrere Variablen entgegen und filtert sie optional
filter_input() Nimmt Variable von Außen entgegen und filtert sie optional
filter_input_array() Nimmt mehrere Variablen von Außen entgegen und filtert sie optional Informationen über den Callback-Typ