Vollständige Version anzeigen : Zend_Input_Filter::isEmail()
Hallo zusammen, ich hab mir jetzt mal die Funtion vom Ralf geschnappt, und sie so abgeändert, dass nur wie in meinem Fall benötigt EMails von einer Domain (meine Uni) zugelassen werden.
public static function isEmail($value)
{
return (bool) preg_match('=^[a-z0-9][\._a-z0-9-]*@[a-z0-9][\.a-z0-9-]*(uni-passau.de)$=i', $value);
}
Vielleicht können wir diese Funktion nach Richtlinien von
http://www.ietf.org/rfc/rfc2822.txt
gemeinsam erarbeiten.
Ich hab jetzt nämlich das Problem, dass zB.:
max.mustermann@stud.uni-passau.de durchgelassen wird,
max.mustermann@uni-passau jedoch nicht.
Daniel84
08.01.2007, 15:18
max.mustermann@uni-passau jedoch nicht.
Das ist ja auch korrekt ;) . Da fehlt ja auch die TLD
Daniel84
08.01.2007, 15:19
und noch was. Sonderzeichen immer escapen im String:
(uni\-passau\.de)
Danke für den Hinweis aufs escapen.
Ich meinte naürlich max.mustermann@uni-passau.de ;)
Warum geht das nicht ??
KingCrunch
08.01.2007, 15:28
=^[a-z0-9][\._a-z0-9-]*@[a-z0-9][\.a-z0-9-]*(uni-passau.de)$=i
Nach dem @ etwas doppelt gemoppelt: Du suchst (1) nach einem "beliebigen" Zeichen, dann (2) noch keinem oder beliebig viele weiter Zeichen und dann (3) nach uni-passau.de. Da aber das uni-passau.de direkt nach dem @ kommt, kann der Teil (1) nicht erfüllt werden.
Ich benutze die Tilde ~ als Delimiter, weil die recht selten in Strings vorkommt, und ich gebe bei "genau einmal" auch gerne die Schranken an, wegen der Lesbarkeit, aber das is nicht soo wichtig ;)
Komisch: ~ als Delimiter hat er mit den code-Block zerhaun
Edit2: er zerhaut ihn mit immer noch -.-
~^[a-z0-9]{1}[\._a-z0-9-]*@uni\-passau\.de$~i
Daniel84
08.01.2007, 15:39
ach so :)
also deine regex ist allgemein noch was verbesserungswürdig. Was soll das = eigentlich am anfang?
So sollte es mit der mail klappen:
return (bool) preg_match('=^[a-z0-9][\._a-z0-9-]*@([a-z]+[\.a-z0-9\-]*uni\-passau\.de|uni\-passau\.de)$=i', $value);
ich habe es noch was abgeändert, da nach dem @ keine zahl kommen darf
Edit: Hab mein Post gelöscht.
Danke Daniel84, so machts genau das was ich will. :)
KingCrunch
08.01.2007, 16:31
ach so :)
also deine regex ist allgemein noch was verbesserungswürdig. Was soll das = eigentlich am anfang?
So sollte es mit der mail klappen:
return (bool) preg_match('=^[a-z0-9][\._a-z0-9-]*@([a-z]+[\.a-z0-9\-]*uni\-passau\.de|uni\-passau\.de)$=i', $value);
ich habe es noch was abgeändert, da nach dem @ keine zahl kommen darf
Das "=" is der Delimiter in dem Fall ;)
Daniel84
08.01.2007, 17:00
ach so :D . Wusste gar nicht das man da was anderes als / nehmen kann.
(Habe ich mir aber auch nie Gedanken drum gemacht :D )
KingCrunch
08.01.2007, 18:49
ach so :D . Wusste gar nicht das man da was anderes als / nehmen kann.
(Habe ich mir aber auch nie Gedanken drum gemacht :D )
Kannst soweit ich weiß alles, ausser Zeichen, die von sich aus Sonderzeichen im RegEx sind, und du musst es, falls du es im RegEx selbst verwendest eben auch mit escapen ;) Ich nehm eben die Tilde, weil sie nicht so häufig vorkommt und sich auch optisch ganz gut abhebt.
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.