Email Regex

Ich kann es gerade nicht testen:
Kann ich hiermit auf eine gültige Email prüfen?

/(\w*)@(\w*)\.(\w{2,3})/

Ich denke mal ja oder:
denn erst ein beliebige Anzahl von Buchstaben Zahlen oder „_“, dann ein „@“ dann wieder das gleiche dann ein „.“ und dann 2-3 Buchstaben tld endung oder?

ich würds so machen:
[php]if(!eregi(‚^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$‘, $email)) {
echo „Adresse ungültig“;
} else {
//Save
}
[/php]

und dann 2-3 Buchstaben tld endung oder?

Es gibt auch topleveldomains mit 4 buchstaben, beispielsweiße *.name

Schreibt man das nicht so:

[php]if(!ereg(‚^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$‘, $email)) {
echo „Adresse ungültig“;
} else {
//Save
}
[/php]

also !ereg statt eregi

Es gibt auch tlds mit 6 buchstaben, z.B. *.museum
:stuck_out_tongue:

!^[a-zA-Z0-9_\-\.]+\@[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}$!

So ist es glaube ich richtig.

TLDs enthalten nie Zahlen, Punkte oder Striche. Sie haben immer eine mindest länge von 2 Buchstaben und die längste mir bekannte ist museum also 6 Buchstaben.

Dann solltest du bei dem Teil vor dem @ nicht die schließende eckige Klammer escapen. Das @ allerdings schon!

Ich bin mir zwar nicht sicher aber ich glaube auch die Domain sollte Punkte enthalten können man kann ja auch E-Mail Addressen auf Subdomains erhalten oder?

Du kannst den Ausdruck nochweiter verkürzen indem du sagst das Groß- und Kleinschreibung irrelevant ist (was ja auch stimmt):

!^[a-z0-9_\-\.]+\@[a-z0-9\-\.]+\.[a-z]{2,6}$!i

Ansonsten schau dir doch auch mal die Filter-Funktionen von PHP an.

Okey ich hatte ne pn an Prophet geschickt, für nen paar kleiner Fragen ich stell sie mal hier rein für alle

				Zitat von [B]Web_spider[/B] 					 				
			[I]ich hab da noch ne zu dm Regex:

ach ja erstmal danke :smile:
bei den stellen
Zitat:
![1]+@[a-z0-9-.]+.[a-z]{2,6}$!i
Kannst du mir mal bitte erklären wieso man das Plus dort nimmt =), ich hab das nie bei tut.php-net verstanden -.-
ACh ja und wofür ist das ! und das ^
das ^ bedeutet doch nicht, aber das brauch ich doch net oder?
Verwendest du das ! als Delimeter

danke im voraus =)

greez web_spider
[/I]


  1. a-z0-9_-. ↩︎

Also die Ausrufezeichen sind die Begrenzer, ja. Ganz einfach deswegen, weil nirgendwo im Ausdruck ein Ausrufezeichen vorkommt.

Das Plus bedeutet das von dem vorangestellten Zeichen 1 oder Mehr an dieser stelle stehen können. In den spitzen Klammern stehen ja verschiedene Zeichen die an dieser Stelle stehen können und mit dem Plus sagt man es können mindestens eines oder beliebig viele dort stehen.

Das ^ sagt aus das der untersuchte String hier beginnt. Sonst würde der ausdruck auch auf strings zutreffen bei dennen eine E-Mail Addresse mitten im Text steht. Das Dollar zeigt an das der string dort zuende sein muss.

Hier nochmal zum nachlesen.

Achja und hier der Link zu den Filter-Funktionen, die sind auch ziemlich interessant in diesem zusammenhang.

Hier eine Listung aller TLDs:
http://www.symweb.de/internet_webdesign/top-level-domains-tld.htm

DieListe ist nicht komplett. Für eine vollständige Liste und Erklärungen:
http://de.wikipedia.org/wiki/Top-Level-Domain