Hi,
define (EMAIL, "/^.+@.+..+$/i");
achte auf die besondere Bedeutung des Backslashes in double-quoted Strings! Kann sein, dass die Sequenz . hier tatsächlich als Backslash und ein Punkt aufgelöst wird, weil die Kombination . keine Sonderbedeutung in einem PHP-String hat. Korrekt ist es aber nicht.
if(strlen($_POST['email']) >= 0 and !preg_match(EMAIL, $_POST['email'])){
echo "Email falsche Syntax"
}
Was willst du mit strlen()>=0 herausfinden? Nichts, denn strlen() liefert *immer* einen Wert größer oder gleich 0. Vermutlich meintest du hier ein einfaches "größer". Besser wäre dafür aber die Abfrage if (!empty($_POST['email']) ...), denn die hat den zusätzlichen Charme, dass sie keine Fehlermeldung (Notice) produziert, wenn $_POST['email'] nicht existiert.
Und vermutlich meintest du hier ein logisches ODER, kein UND. Denn wenn ich einen Leerstring übergebe, ist schon die korrigierte erste Bedingung strlen()>0 nicht erfüllt, die zweite wird gar nicht mehr ausgewertet.
hans-peter.meier@test.de
Bitte verwende für Beispiele entweder deine eigene Domain, oder eine der dafür vorgesehenen. Die Stiftung Warentest besitzt vermutlich eine der am häufigsten missbrauchten Domains und wird darüber nicht begeistert sein.
Sobald ich den Bindestrich weglasse, match der Regex
Hast du dir mal den in $_POST['email'] übergebenen String angesehen? Ich wüsste zwar nicht, warum - aber vielleicht spielt da noch irgendeine seltsame Maskierung mit rein.
komisch oder?
Ja, sehr.
Ciao,
Martin
F: Wer ist der Herrscher über Wasser, Wind und Wellen?
A: Der Friseur.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(