Problem mit E-Mail Kontrolle (ereg)
morpheuz
- php
Hallo zusammen,
ich möchte gerne die E-Mails verwalten. Der User darf es nur möglich sein den Text vor dem @-Zeichen zu setzen.
Und dieser Text darf keine Sonderzeichen enthalten, ansonsten alles.
Es soll folgendes erlaubt sein:
nachname
vorname.nachname
vorname.nachname-zuname
vorname-vorname2.nachname-zuname
ich habe folgendes probiert:
--------------------------------------------------------------------
if(!ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) || !ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) || !ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) || !ereg("^([0-9,a-z,A-Z]+)?$", $_POST['email_neu']))
{
echo "<font class='error'>Fehler:</font><font> Bitte
korrigieren Sie die eingegebene E-Mail Adresse.<br><br>
<b>Bitte gehen Sie zurück und korrigieren Sie den Fehler.
<form action='?action=ReadinessReceiver&do=edit&back=true' method='POST'>
<input type='hidden' name='email_alt' value='" . $_POST['email_alt'] . "'>
<input type='hidden' name='email_neu' value='" . $_POST['email_neu'] . "'>
<input type='image' src='img/zurueck.jpg'>
</form></b>";
}
-------------------------------------------------------------------
Das funktioniert leider nicht, denn jetzt kann gar nichts mehr eingegeben werde, er gibt immer an - das die E-Mail falsch ist. Wie wird es richtig gemacht - habt ihr eine Idee?
ciao morpheuz
Moin,
Und dieser Text darf keine Sonderzeichen enthalten, ansonsten alles.
Du weisst schon dass beispielsweise "Henryk Ploetz"@ploetzli.ch eine gültige email-Addresse ist?
if(!ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) ||
Der Code ist _viel_ zu umständlich, aber dein Problem scheint einfach zu sein dass du hier && statt || benutzen willst.
In lang: du meinst offenbar if(!(ereg(...) || ereg(...) || ereg(...) || ereg(...))). Wenn man da die Negation in die Klammer reinzieht, müssen alle || und && vertauscht werden (De Morgan'sche Regeln): if(!ereg(...) && !ereg(...) && !ereg(...) && !ereg(...)).
Ich würde übrigens als regexp eher /^(\w+(.\w+(-\w+)?)?)|(\w+-\w+.\w+-\w+)$/ verwenden. (plus/minus x)
Hallo Henryk,
danke dir - jetzt funktionierts!
ciao morpheuz
Hallo morpheuz!
Mit folgendem Pattern sollte sich der Benutzer- bzw. Postfach-Name einer eMail-Adresse nach deinen Wünschen auf Gültigkeit überprüfen lassen (ungetestet):
"/^([A-Za-z0-9_])+(-[A-Za-z0-9_]+)?(.[A-Za-z0-9_]+(-[A-Za-z0-9_]+)?)?/"
Bei deinen Vorgaben hast du die Mittelnamen nicht berücksichtig. Ein Name wie "Karl-Heinz Dieter van de Blömches" lässt sich nicht nach deinen Vorgaben Abbilden. Richtig wäre eigentlich folgende Darstellung:
Karl-Heinz.Dieter.van-de-Blömches@... oder
Karl-Heinz.Dieter.van.de.Blömches@...
Noch ein Tipp: Ich würde anstatt der Funktion "ereg()" die Funktion "preg_match()" u. a. wegen den Geschwindigkeitsvorteilen bevorzugen. (Siehe hierzu auch die dclp-FAQ: "8.2. Soll ich ereg() oder preg() verwenden?", http://www.dclp-faq.de/q/q-regexp-ereg.html).
Grüsse,
Sky