Die Aufgabe
Einen String anschaun, und feststellen, ob der genügend nach E-Mail-Adresse aussieht, oder nicht.
Der User-Teil darf vermutlich alles mögliche enthalten? In diesem Fall darf er vor allem keine Whitespace und keine Klammerungszeichen enthalten ({[<>]}), aber wie üblich ist's für die Aufgabe nicht so supergenau spezifiziert. Da bin ich etwas ängstlich und hau lieber um mich...
Der Domainteil darf A-Z und 0-9 und - und . beinhalten und endet nach dem letzten . auf mindestens zwei A-Z.
Mein Ansatz:
$email =~ m/
^ # Vom Anfang
[\w\.\+-]+ # mindestens ein Buchstabe, Zahl, . - + _
\@ # das @-Zeichen
[a-zA-Z0-9\.-]* # keine oder beliebig viele Buchstaben, Zahlen, . -
[a-zA-Z0-9] # genau einen Buchstaben oder eine Zahl.
[a-zA-Z0-9\.-]* # keine oder beliebig viele Buchstaben, Zahlen, . -
\. # ein Punkt
[a-zA-Z]{2,} # zwei oder mehr Buchstaben
$ # bis zum Ende
/x and print "OK\n";
Krumme Adressen wie "+@1.org" kommen also an. Das gilt als korrekt. Insbesondere sollen Adressen wie
"<korrektes@example.com>" und
"korrekt(wirklich )@example(korrektes ).(Beispiel)com" aber beabsichtig abgelehnt werden, auch wenn RFCs und im ersten Fall wohl auch der gesunde Menschenverstand sie für korrekte E-Mail-Adressen hält.
Keinesfalls durchschlüpfen darf sowas:
"< -force -exec rm -rf />/dev/null@example.com" bzw.
"< -force -exec rm -rf />/dev/null@example.com<>" bzw.
'<"<>" -force -exec rm -rf />/dev/null@example.com'
und daher auch die ungewöhnlich krankhafte Aufgabenstellung.
Hab ich auhc nix übersehen? Danke für die Adleraugen! 8)