ich: Semikolon an erster Stelle

Beitrag lesen

Hallo Forum!

Tag auch

Das Skript enthält eine Adressen-Validierung, die ungültige E-Mail-Adressen herausfiltern soll. Dummerweise scheitert das Skript an einem Semikolon an der ersten Stelle.

Ich habe schon das hier ausprobiert:

if(strpos($email_from,";") != "")
{
include("include/invalid_emailad.htm");
exit;
}

?! Wenn die ermittelte Position von ';' ungleich einem leeren String ist? Was soll das bringen?

Diese Methode kommt mit einem Semikolon an der ersten Stelle nicht zurecht und bezeichnet die Adresse als gültig. Wenn sich das Semikolon an einer anderen Stelle befindet, gibt es keine Probleme.

Dann habe ich noch das hier ausprobiert:

if(strpos($email_from,";") >= 0)
{
include("include/invalid_emailad.htm");
exit;
}

Auch nicht schlecht, wurde aber schon was drüber erzählt...

Ich hätte da was, was gleich die ganze Syntax auf einmal checkt... (zumindest hoffe ich das)

if (!preg_match("/^([a-zA-Z0-9]{1,}([.]?|[-]?|[_]?))*[a-zA-Z0-9]{1,}@([a-zA-Z0-9]{1,}([.]?|[-]?))*[a-zA-Z0-9]{1,}.{1}[a-zA-Z]{2,6}$/",$HTTP_POST_VARS["email"]))
     {
      die("Die von Ihnen angegebene Mailadresse ist ungültig!\n</body></html>");
     }

Also:

das erste Zeichen der Mailadresse darf 0-9,a-z,A-Z sein und dies kann sich dann beliebig oft wiederholen. '.','-' und '_' dürfen darauf folgen, müssen aber nicht (somit dürfen dies auch nicht als erstes Zeichen der Adresse da stehen) dieses muster darf sich bis hier beliebig oft wiederholen >> '^([a-zA-Z0-9]{1,}([.]?|[-]?|[_]?))*' (wobei dann auch ausgeschlossen wird das '.' auf '-' folgt, '-' auf '.', '_' auf '-'; also alle hier möglichen Kombinationen.)

Es muß aber zumindest einmal ein Zeichen aus 0-9,a-z und A-Z vor dem @ vorgekommen sein, wobei hier auch ausgeschlossen wird, das '.','-' und '_' direkt vor dem '@' stehen - '@' muß dann auch einmal vorkommen, aber nicht öfter. Das wäre dann dieser Teil: [a-zA-Z0-9]{1,}@

Dann wird geprüft, ob das, was auf '@' folgt ein Zeichen aus 0-9,a-z und A-Z ist und das darauf ein '.' oder '-' folgen kann ('_' im Domainnamen ist AFAIK nicht erlaubt) Auch dieses Schema darf sich beliebig oft wiederholen (darf aber auch garnicht vorkommen), wobei dann auch kein '.' oder '-' dierekt hinter dem '@' stehen darf und diese zwei Zeichen auch nicht direkt hintereinander stehen dürfen. (Dieser Teil hier: ([a-zA-Z0-9]{1,}([.]?|[-]?))*)

Es muß jedoch mindestens einmal (ich bin mir nicht sicher ob man 1 stellige Domainnamen haben darf) ein Zeichen aus 0-9,a-z und A-Z vorkommen bevor ein '.' kommt. ([a-zA-Z0-9]{1,}.{1})

Nach diesem punkt müssen dann mindestens zwei; maximal 6 Zeichen (TLD '.museum') aus a-z und A-Z vorkommen (Zahlen in der TLD sind nicht erlaubt) wobei das ganze dann auch hier zuende sein muß ([a-zA-Z]{2,6}$)

Wenn ich also beim ertsellen dieses Ausdrucks alles richtig bedacht habe, dann sollte der die Mailadresse korrekt auf Ihre Gültigkeit prüfen. Umlaute sind kein Teil von a-z und A-Z - zumindest im US Alphabet, was bei PHP gilt... (wenn das nichts ist, was man umstellen kann - man weis ja nie.)

Sollte da ein Fehler drinn sein, dann bitte hier posten...

bye
ich