# Mit Regex email überprüfen



## hetti (3. Februar 2004)

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:


```
$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.


----------



## Tim C. (3. Februar 2004)

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  ), 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.


----------



## hetti (3. Februar 2004)

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!


----------



## Nils Hitze (4. Februar 2004)

Tim, irgendwie habe ich das Gefühl du möchtest mir meinen
Titel als kompetentester RegExFreak streitig machen 

Jona


----------



## Tim C. (4. Februar 2004)

> _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 ?


----------



## hetti (8. Februar 2004)

Kann mir jemand noch bei den beiden Punkten helfen

wäre sehr nett, danke



> 2. Muss im Name-Feld mindestens ein Buchstabe eingegeben werden
> 3. Darf im Eintrag-Feld kein HTML-Code stehen


----------



## MiLa (8. Februar 2004)

Um zu deinem zweiten Punkt zu kommen:

```
if(strlen($name)>1)
{
  //Hier wird dann der Eintrag gemacht
}
else
{
  //Fehlermeldung
}
```

Dein dritter Punkt sollte dann hiermit erledigt werden:

```
$beschreibung=str_replace("<", "&lt", $beschreibung);
$beschreibung=str_replace(">", "&gt", $beschreibung);
```


----------



## Nils Hitze (9. Februar 2004)

http://weitz.de/files/regex-coach.exe

hier zu finden .. 
http://www.weitz.de/regex-coach/

Sehr gutes Ding .. kompiliert on the Fly und 
gibt das Ganze farbig hinterlegt wieder.

Hat ausserdem die Option den Lauf der 
RE Maschine buchstabenweise zu verfolgen.

Jona


----------



## hetti (9. Februar 2004)

@lars:
Ich meine nicht, dass der HTML-Code umgewandelt wird, sondern dass erst gar kein HTML im Beitrag vorhanden sein darf!


----------



## MiLa (9. Februar 2004)

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...


----------



## hetti (9. Februar 2004)

Wie ist das denn hier im Forum geregelt? Hier ist doch auch HTML verboten ...


----------



## Tim C. (9. Februar 2004)

Wie genau das implementiert ist, kann ich dir nicht sagen, aber ich denke, es wird über die String-Funktionen zum ermitteln von Positionen von bestimmten Zeichen, einfach alles zwischen < und > rausgefiltert, inklusive der Dinger selbst.

Ansonsten wäre htmlentities() noch eine Idee, finde ich.


----------



## cocoon (10. Februar 2004)

> _Original geschrieben von Tim Comanns _
> Naja, kann mir irgendwer ein kleines Tool empfehlen, mit dem man preg_match und vorallem preg_replace testen kann ?


Nils hat ja schon was genannt. Ferne gibt es für den Weaverslave Editor ein Plugin: http://www.weaverslave.ws/resdb/comment.php?dlid=1
Konnte es allerdings bislang noch nich testen.


----------



## won_gak (10. Februar 2004)

strip_tags ()

http://de3.php.net/manual/de/function.strip-tags.php


----------



## max78 (31. Mai 2008)

hi,

du könntest alle "<" in "&lt;" umwandeln.


```
<?php
$string = str_replace("<", "&lt;", $string);
?>
```

Alternativ gibt es die Funktion

```
htmlspecialchars();
```
http://de.php.net/manual/de/function.htmlspecialchars.php


----------



## SimonErich (31. Mai 2008)

Haha wie genial @max78 der Thread ist mehr als 4 Jahre alt.
Ich denke hetti ist inzwischen ein PHP Gott 

Und deine Lösung wurde bereits genannt. Wie bist du denn auf dieses Thema gekommen ?


----------

