Julius: Erster Prototyp des PHP-Forums

Beitrag lesen

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