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 |