Hallo Matthias,
Eine formale Prüfung auf Client-Seite leistet bereits
<input type="email">
. Der verwendete RegEx ist
[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
Quelle: https://www.w3.org/TR/html-markup/input.email.html
Die PHP-Filter-Funktion verwendet denselben, wenn ich das richtig lese.
Ich habe mir dafür mal ein kleines Skript gebastelt (bei der arabischen Beispiel-Adresse bin ich mir nicht sicher):
$email = array(
'mail@example.org',
'mäil@fußhölle.de',
'test@موقع.وزارة-الاتصالات.مصر',
'bla@Доменні.ru');
foreach($email as $value)
{
echo '<label>';
if(filter_var($value, FILTER_VALIDATE_EMAIL))
{
echo 'Ist E-Mail-Adresse laut filter';
}
else
{
echo 'keine E-Mail-Adresse laut Filter ';
}
if((bool)preg_match('/[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*/', $value))
{
echo ' Ist E-Mail-Adresse laut RegEx ';
}
else
{
echo ' Ist keine E-Mail-Adresse laut RegEx ';
}
echo '<input type="email" value="'.htmlspecialchars($value).'" required></label>';
}
Wenn ich das unter PHP5.6 ausführe, werden alle E-Mail-Adresse bis auf die erste (mail@example.org) als Falsch ausgegeben, während Firefox alle bis auf die mit dem „mäil“ vor der Adresse durchgehen lässt (anscheinend mag er keine nicht-ASCII-Zeichen vor dem @).
„Wer“ hat Recht?
Beim RegEx scheint nur Unfug raus zu kommen (alle Adressen sind falsch), aber ich denke mal, dass ich da irgend einen Fehler gemacht habe (falsche RegEx-Begrenzer?).
Gruß
Julius