Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Lernpfade
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 Unit Test Generator
 TLD Liste
 Webkatalog‑Verzeichnis

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 
 

PHP filter_validate_email und _url: Eingaben sicher prüfen

Sie befinden sich: Home > Php Tutorial > PHP filter_validate_email u...

PHP filter_validate_email und _url: Eingaben sicher prüfen
Eintrag am:
12.07.2026
Hits / Besucher:
95
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
Merkliste:
 
Beschreibung

Ob Kontaktformular, Newsletter-Anmeldung oder API-Endpunkt: Kaum ein PHP-Projekt kommt ohne die Prüfung von E-Mail-Adressen und URLs aus. Mit PHP filter_validate_email und den verwandten FILTER_VALIDATE_-Konstanten bringt die Sprache dafür fertige Werkzeuge mit, die eigene Regex-Basteleien in den meisten Fällen überflüssig machen.

Warum PHP filter_validate_email und Co besser sind als eigene Regex

Die Funktion filter_var() von PHP ist das eingebaute Werkzeug für typische Eingabevalidierungen. Mit Konstanten wie PHP filter_validate_email, FILTER_VALIDATE_URL, FILTER_VALIDATE_IP, FILTER_VALIDATE_DOMAIN und FILTER_VALIDATE_REGEXP lassen sich die häufigsten Prüfungen in einer Zeile erledigen, ohne dass jemand seine eigene Regex pflegen muss. Die Filter folgen anerkannten Standards (RFC für E-Mails, RFC für URLs, IPv4/IPv6 nach IETF) und werden zentral mit PHP gepflegt.

Illustration zum Tutorial: PHP filter_validate_email und _url: Eingaben sicher prüfen

Bevor die einzelnen Filter und ihre Flags an Beispielen folgen, eine kurze Einordnung dieses Tutorials gegenüber dem allgemeinen filter_var()-Einstieg.

Dieses Tutorial konzentriert sich auf die spezifischen Validate-Filter und ihre Flags. Wer zuerst einen breiten Einstieg in filter_var() und seine Bedeutung sucht, findet das im Tutorial über die allgemeine Eingabefilterung. Hier geht es konkret darum, welcher Filter für welchen Datentyp passt und welche Flags die Prüfung verfeinern.

PHP filter_validate_email für E-Mail-Adressen

Der häufigste Einsatz ist die E-Mail-Validierung. PHP filter_validate_email prüft die Syntax einer E-Mail-Adresse und liefert die Adresse zurück, falls sie passt, sonst false. Im Erfolgsfall bekommt der Aufrufer also die unveränderte Eingabe als String. Wichtig ist die strikte Prüfung mit === false, weil filter_var() bei einer gültigen Adresse einen String zurückgibt, der niemals leer und damit truthy ist.

<?php

$eingabe = $_POST['email'] ?? '';

if (filter_var($eingabe, FILTER_VALIDATE_EMAIL) === false) {
echo 'Bitte eine gueltige E-Mail eingeben.';
} else {
echo 'E-Mail ok: ' . htmlspecialchars($eingabe);
}

Wichtig zu wissen: PHP filter_validate_email prüft nur die Syntax, nicht die Existenz der Mailadresse. Dass mia@example.com syntaktisch korrekt ist, sagt nichts darüber aus, ob es ein Postfach gibt, das diese Mails entgegennimmt. Für den Existenznachweis bleibt der klassische Confirm-Mail-Workflow mit Token-Link das verlässliche Mittel. Der Filter ersetzt also keine Doppelt-Opt-In-Strategie, sondern ist die schnelle Vor-Prüfung, die kaputte Eingaben sofort aussortiert.

PHP filter_validate_email Verwandte: FILTER_VALIDATE_URL mit Flags

URLs sehen oft korrekt aus, sind aber in Wirklichkeit unbrauchbar, weil ein Schema fehlt oder kein Pfad angegeben ist. Mit Flags lässt sich FILTER_VALIDATE_URL deutlich strenger machen.

<?php

$url = 'https://php-space.info/php-tutorials/';
$flags = FILTER_FLAG_HOST_REQUIRED | FILTER_FLAG_PATH_REQUIRED;

if (filter_var($url, FILTER_VALIDATE_URL, $flags) !== false) {
echo 'URL ok';
} else {
echo 'URL ungueltig';
}

/* "https://" ohne Pfad: false
"//example.com/pfad": false (kein Schema)
"ftp://server/file": true (auch FTP-Schema akzeptiert) */

Standardmäßig akzeptiert FILTER_VALIDATE_URL jede syntaktisch korrekte URL, auch ohne Host. Mit FILTER_FLAG_HOST_REQUIRED muss ein Host enthalten sein, mit FILTER_FLAG_PATH_REQUIRED zusätzlich ein Pfad. Wer ausschließlich HTTP- oder HTTPS-URLs akzeptieren möchte, ergänzt einen separaten Check mit parse_url() und prüft das Schema gezielt, weil FILTER_VALIDATE_URL auch ftp://, mailto: oder javascript: durchlässt.

FILTER_VALIDATE_IP neben PHP filter_validate_email für IPv4 und IPv6

PHP filter_validate_email hat für IP-Adressen einen wichtigen Verwandten. Bei IP-Adressen erlaubt der Filter eine feine Trennung in v4 und v6. Standardmäßig akzeptiert FILTER_VALIDATE_IP beide Versionen, mit Flags lässt sich auf eine Variante einschränken.

<?php

$adresse = '192.168.1.42';

if (filter_var($adresse, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo 'Gueltige IPv4';
}

$v6 = '2001:db8::1';
if (filter_var($v6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
echo 'Gueltige IPv6';
}

/* No-Private-Range erzwingen */
$flags = FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE;
if (filter_var($adresse, FILTER_VALIDATE_IP, $flags)) {
echo 'Oeffentliche IPv4';
} else {
echo 'Adresse aus privatem oder reserviertem Bereich';
}

Spannend sind die Flags FILTER_FLAG_NO_PRIV_RANGE und FILTER_FLAG_NO_RES_RANGE, die private (10.0.0.0/8, 192.168.0.0/16) bzw. reservierte (127.0.0.0/8) IP-Bereiche aussortieren. Genau das brauchen API-Endpunkte, die keine internen Adressen akzeptieren sollen, oder URL-Loader, die keine SSRF-Anfragen ans interne Netz erlauben möchten.

FILTER_VALIDATE_DOMAIN als Ergänzung zu PHP filter_validate_email

Wer nur eine Domain ohne http:// prüfen möchte, etwa für ein Newsletter-Setup oder eine Whitelist, greift zu FILTER_VALIDATE_DOMAIN. Mit FILTER_FLAG_HOSTNAME werden RFC-konforme Hostname-Regeln durchgesetzt.

<?php

$domain = 'php-space.info';

if (filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) {
echo 'Gueltiger Hostname';
}

/* Akzeptiert: php-space.info, sub.example.com, my-host
Ablehnt: -minus-vorne.com, .punkt-vorne.com, leerzeichen mit name.de */

Ohne den Flag ist die Prüfung sehr permissiv und akzeptiert auch Strings, die in der Praxis kein gültiger Hostname sind. Der Flag schließt diese Lücke und macht den Filter zur natürlichen Wahl für Domain-Eingabefelder.

FILTER_VALIDATE_REGEXP zusätzlich zu PHP filter_validate_email

Wer PHP filter_validate_email kennt, will manchmal mehr. Manche Eingaben passen in keine Standard-Kategorie, etwa eine deutsche Postleitzahl oder eine Steuernummer. Statt preg_match() direkt aufzurufen, kann der eigene Regex sauber in einem filter_var()-Aufruf verpackt werden.

<?php

$plz = '50667';

$gepruefte = filter_var($plz, FILTER_VALIDATE_REGEXP, [
'options' => ['regexp' => '/^[0-9]{5}$/'],
]);

if ($gepruefte !== false) {
echo 'PLZ ok: ' . $gepruefte;
} else {
echo 'Bitte 5 Ziffern eingeben.';
}

Der Vorteil dieser Schreibweise gegenüber preg_match() ist die Konsistenz im Code: Alle Validierungen laufen über filter_var() und folgen dem gleichen Pattern. Wer mehrere Felder mit eigenen Regex prüft, kombiniert das mit filter_var_array() zu einem einzigen Aufruf, wie der nächste Abschnitt zeigt. Wer noch mehr über Regex in PHP wissen möchte, findet einen tieferen Einblick im Tutorial zu regulären Ausdrücken.

Mehrere Felder mit PHP filter_validate_email und filter_var_array

Bei Formularen mit mehreren Feldern wird der Code mit einzelnen filter_var()-Aufrufen schnell unübersichtlich. filter_var_array() nimmt das gesamte Eingabe-Array plus eine Spec, die pro Feld den passenden Filter beschreibt.

<?php

$daten = [
'email' => 'mia@example.com',
'webseite' => 'https://php-space.info',
'plz' => '50667',
];

$spec = [
'email' => FILTER_VALIDATE_EMAIL,
'webseite' => ['filter' => FILTER_VALIDATE_URL, 'flags' => FILTER_FLAG_HOST_REQUIRED],
'plz' => ['filter' => FILTER_VALIDATE_REGEXP, 'options' => ['regexp' => '/^[0-9]{5}$/']],
];

$ergebnis = filter_var_array($daten, $spec);
print_r($ergebnis);

Im Ergebnis-Array stehen pro Feld entweder der geprüfte Wert oder false, falls die Validierung fehlgeschlagen ist. Der ganze Validierungs-Block lässt sich so in einem zentralen Helper kapseln, was den Controller-Code kurz und konsistent hält. Mehr Details und Patterns gibt es im Tutorial zu filter_var_array.

Edge-Cases und was PHP filter_validate_email nicht tut

Auch der beste Filter hat Grenzen. PHP filter_validate_email folgt einer simplifizierten RFC-5322-Variante, die nicht jede technisch erlaubte Mailadresse akzeptiert. Adressen mit Anführungszeichen im lokalen Teil oder mit Kommentaren in Klammern werden zwar von einigen Mail-Servern akzeptiert, aber von PHP als ungültig markiert. Für 99,9 Prozent der Praxisfälle ist das kein Problem, weil solche Adressen extrem selten und meist in alten Systemen entstanden sind.

Internationalisierte Domain-Namen (IDN) wie mia@müller.de werden ebenfalls nicht direkt akzeptiert. Hier hilft idn_to_ascii(), das die Domain in das Punycode-Format umwandelt, bevor der Filter prüft.

<?php

$mail = 'mia@müller.de';

$lokal = explode('@', $mail)[0];
$domain = idn_to_ascii(explode('@', $mail)[1]);
$ascii = $lokal . '@' . $domain;

if (filter_var($ascii, FILTER_VALIDATE_EMAIL) !== false) {
echo 'Gueltig (Punycode-Form): ' . $ascii;
}
/* Gueltig (Punycode-Form): mia@xn--mller-kva.de */

Bei FILTER_VALIDATE_BOOLEAN ist Vorsicht geboten: Anders als die anderen Validate-Filter gibt er bei einem ungültigen Wert null zurück, nicht false. Wer den Default-Prüf-Pfad mit === false benutzt, wird hier überrascht. Der saubere Weg ist filter_var($wert, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) und ein anschließender === null-Check.

Wer die Validate-Filter in einer Helper-Funktion oder einem Service-Layer kapselt, kann die Validierungs-Regeln pro Feldtyp an einer einzigen Stelle pflegen. Spätere Anpassungen an Flags oder Edge-Cases müssen dann nicht durch das ganze Projekt nachgezogen werden.

Fazit zu PHP filter_validate_email

Mit den Validate-Filtern stellt PHP eine Werkzeugkiste bereit, die fast alle Standard-Eingabevalidierungen abdeckt. PHP filter_validate_email prüft Mailadressen syntaktisch, FILTER_VALIDATE_URL mit den Flags HOST_REQUIRED und PATH_REQUIRED macht URL-Prüfungen strikt, FILTER_VALIDATE_IP trennt v4 und v6 sauber, und FILTER_VALIDATE_DOMAIN mit FILTER_FLAG_HOSTNAME validiert reine Domain-Eingaben. Eigene Muster lassen sich mit FILTER_VALIDATE_REGEXP integrieren, mehrere Felder gleichzeitig mit filter_var_array(). Wichtig bleibt das Bewusstsein, dass alle Filter nur die Form prüfen, nicht den fachlichen Inhalt: Eine technisch gültige Mail kann trotzdem nicht zustellbar sein. Mit dieser Klarheit sind die FILTER_VALIDATE_-Konstanten der schnelle, zuverlässige Default für praktisch jede Eingabevalidierung.

 

Tags:

 

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.