Mit Regex email überprüfen

hetti

Grünschnabel
Hi!

Wir machen in Informatik gerade PHP und mySQL und schreiben ein Guestbook und eine Linkliste.
Da wir einige Dinge überprüfen wollen und ich gar keine Ahnung von regex habe, bitte ich euch um Hilfe. Also:
1. Wollen wir überprüfen, ob die email eine gültige Form hat (z.b. a@b.de, oder a.b@c.com oder f_gh@ijk.lmno)
2. Muss im Name-Feld mindestens ein Buchstabe eingegeben werden
3. Darf im Eintrag-Feld kein HTML-Code stehen

2. könnte ich denk ich noch alleine hinbekommen, aber bei den anderen bin ich absolut machtlos. Hoffe, dass ihr mir helfen könnt! Hier mal mein PHP-Script:

PHP:
$url = $HTTP_POST_VARS["url"];
  $username = $HTTP_POST_VARS["username"];
  $beschreibung = $HTTP_POST_VARS["beschreibung"];
  $email = trim($HTTP_POST_VARS["email"]);
  
  $zeit = date("d.m.Y H:i");
  

  $muster = "^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([_a-zA-Z0-9-]{2,}\.){0,}[_a-zA-Z0-9-]{3,}(\.[_a-zA-Z]{2,4}){1,2}$"; 

	if (ereg_match($muster, $email)) {
		echo "klappt!";
		mysql_query("INSERT INTO links (username,email,url,beschreibung,zeit) VALUES ('$username','$email','$url','$beschreibung','$zeit')") or die(mysql_error());
		
		}
	else {
		echo "Fehler! Keine gueltige email angegeben!";
		}

Das bisherige Muster funktioniert nicht, es wird weder in die DB eingetragen noch wird ein Fehler ausgegeben.
 
In unserer PHP-Linkliste findet sich folgendes Tutorial zu Regex, welches am Ende auch ein konkretes Beispiel für einen E-Mail Check enthält.

http://www.phptutorials.de/index.php?article=23&tpl=1

Ausserdem haben wir auch in unserer Tutorials Section, ein Regex Tutorial (von mir geschrieben :rolleyes: ), was dir evtl. weiterhelfen kann.

http://www.tutorials.de/tutorials142738.html

Spontan fällt mir auf, in deinem Pattern fehlen die Delimiter, oder braucht man die bei den ereg_ Funktionen nicht ? Prinzipiell würde ich jedoch die preg_ Funktionen nutzen, da die dabei zu Grunde liegenden Pattern dem PCRE (Perl Compatible Regular Expressions) Standard entsprechen.
 
Danke für deine schnelle Hilfe. Dein Tutorial hab ich schon gelesen, leider komm ich da nicht so gut mit, hab mich damit auch erst ne Stunde beschäftigt. Der erste Link mit der Überprüfung hat mir sehr weitergeholfen, danke!
 
Original geschrieben von Nils Adomeit
Tim, irgendwie habe ich das Gefühl du möchtest mir meinen
Titel als kompetentester RegExFreak streitig machen :-)

Jona
Durchaus möglich :-)

Allerdings habe ich gestern auch mal wieder kapituliert bei so einer Geschichte mit RegEx, obwohl es eigentlich super einfach hätte sein müssen.

Naja, kann mir irgendwer ein kleines Tool empfehlen, mit dem man preg_match und vorallem preg_replace testen kann ?
 
Um zu deinem zweiten Punkt zu kommen:
PHP:
if(strlen($name)>1)
{
  //Hier wird dann der Eintrag gemacht
}
else
{
  //Fehlermeldung
}

Dein dritter Punkt sollte dann hiermit erledigt werden:
PHP:
$beschreibung=str_replace("<", "&lt", $beschreibung);
$beschreibung=str_replace(">", "&gt", $beschreibung);
 
@lars:
Ich meine nicht, dass der HTML-Code umgewandelt wird, sondern dass erst gar kein HTML im Beitrag vorhanden sein darf!
 
Hierzu ist mir leider keine Funktion bekannt.
Du könntest es so machen, dass bei Zeichen wie < und > der Vorgang abgebrochen ist, das ist aber nicht sehr ratsam, da die User dann auch in normalem Text keine < und > verwenden dürfen.

Vieleicht gibt es per JavaScript eine Möglichkeit dein Problem zu lösen...
 
Zurück