WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   mail adresse mit neuen domäns prüfen (http://www.wcm.at/forum/showthread.php?t=130632)

Potassium 06.04.2004 21:42

mail adresse mit neuen domäns prüfen
 
ich möchte eingegeben mailadresse auf richtigkeit überprüfen und da ist mir eingefallen das es mit einem "simplen"
PHP-Code:

if(ereg("^([A-Za-z_\.0-9]*)@([A-Za-z0-9_]*)\.([A-Za-z0-9\.]*)$",$Mail)) { 

nicht mehr getan ist weil es ja auch umlautdomains gibt.
nun meine frage: wie würde eine aktulle überprüfung aussehen?

btw: was macht ^ am anfang und $ am ende und * in der mitte????

Who-T 06.04.2004 22:27

frag mich nicht wie du umlaute reinbringst aber vielleicht kann regex ja

[A-Za-z_.0-9üöäÜÖÄ]
vielleicht geht das ja


anyway:

^ heißt anfang des strings
$ ende des strings
^[A-Z]$ wäre jeder einzelne großbuchstabe

* bestimmt die häufigkeit (0 bis viele) des vorherigen ausdrucks

jak 06.04.2004 22:51

Du könntest ja eine Kopie der Mailadresse in einer Hilfsvariable speichern, in der daß ä durch ae ersetzen und wenn die überprüfung ok ist die originale Adresse verwenden.

Oder du löst die Domain in ihren Punycode auf (frag mich nicht wie das geht...).

Jak

käptn 06.04.2004 23:06

1.) ereg* ist böse! Man nehme preg*
2.) Man nehme außerdem [[:alpha:]]

~

Potassium 06.04.2004 23:49

Zitat:

Original geschrieben von käptn
1.) ereg* ist böse! Man nehme preg*
2.) Man nehme außerdem [[:alpha:]]

~

ad 1 begründung? und welches von denen? preg_grep nehme ich an oder?
ad2: WTF? PHP hilfe kennt das ned. codebeispiel :D *bittebitte*

Who-T 07.04.2004 00:11

[[:alpha:]] sind alle alphanumerischen zeichen -> [A-Za-z0-9]

Potassium 07.04.2004 00:17

ok nun hab ichs so:
PHP-Code:

if(ereg("^([[:alpha:]]_-\\.*)@([[:alpha:]]_-\\.*)\.([[:alpha:]]_-\\.*)$",$Mail)) { 

sind bei alpha die umlaute auch schon dabei?

Who-T 07.04.2004 00:23

wieso probierst du es eigentlich net aus?
wenn du eh schon den regex hast?

Potassium 07.04.2004 00:27

Zitat:

Original geschrieben von Who-T
wieso probierst du es eigentlich net aus?
wenn du eh schon den regex hast?

regex?

edit: ajo das obrige funzt ned :(
er erkennt jeder mailadresse als falsch. :heul:

Who-T 07.04.2004 00:35

regex = regular expression


bei dem obigen ist ein fehler in der klammerung

du musst die _/. usw mitklammern
probier mal [[[:alpha:]]-_\.*]

Potassium 07.04.2004 00:41

weder mit noch ohne eingeklammerten * funzt es :(
folgende varianten funzen NICHT:
PHP-Code:

if(ereg("^([[[:alpha:]]_-\.]*)@([[[:alpha:]]_-\.]*)\.([[[:alpha:]]_-\.]*)$",$Mail)) {

if(
ereg("^([[[:alpha:]]_-\.*])@([[[:alpha:]]_-\.*])\.([[[:alpha:]]_-\.*])$",$Mail)) {

if(
ereg("^([[:alpha:]_-\.*])@([[:alpha:]_-\.*])\.([[:alpha:]]_-\.*])$",$Mail)) {

if(
ereg("^([[:alpha:]_-\.]*)@([[:alpha:]_-\.]*)\.([[:alpha:]_-\.]*)$",$Mail)) { 


JackLemon 07.04.2004 01:43

bin kein regex-experte, aber steht ein . nicht für ein beliebiges zeichen? imho müsste man den escapen -> \. oder ggf. \\.

außerdem gibt es in der tld (com, net, org) weder zahlen noch _ oder -. solltest beim letzten austruck das :alpha: überdenken und - und _ weglassen.

JackLemon 07.04.2004 01:51

ich nochmal. wie gesagt, bin nicht sicher, aber geht es vielleicht irgendwie so?:

^(A-Z|a-z|0-9|\-|_|\.)*@(A-Z|a-z|0-9|\-|\.)*\.(A-Z|a-z)(A-Z|a-z)(A-Z|a-z)?(A-Z|a-z)?$

Potassium 07.04.2004 02:39

Zitat:

Original geschrieben von JackLemon
bin kein regex-experte, aber steht ein . nicht für ein beliebiges zeichen? imho müsste man den escapen -> \. oder ggf. \\.

außerdem gibt es in der tld (com, net, org) weder zahlen noch _ oder -. solltest beim letzten austruck das :alpha: überdenken und - und _ weglassen.

die zeichen sind eh escaped aber dieseeinfärbe dingsda vom forum nimmt sie wieder weg......

wcm|Tweety 07.04.2004 11:42

du könntest alle möglichen adresse in ein dokument schreiben und überprüfen ob die eigegebene da auch vorkommt ;D
*renn*

käptn 07.04.2004 11:58

ad 1) ereg* ist verammt langsam
ad 2) du musst natürlich die anderen Zeichen auch in der Zeichenklasse berücksichtigen, zB:

[[:alpha:],._-]*

Und [:alnum:] wären alle alphanumerischen Zeichen.

Zum Schluß sollte vielleicht noch etwas erwähnt werden: RTFM! ;)

~

käptn 07.04.2004 12:02

Ach noch was, gerade entdeckt:

Der Bindestrich sollte in einer Zeichneklasse immer zuerst oder zuletzt stehen, wenn er nicht maskiert wird.

~

Potassium 07.04.2004 13:29

wegen RTFM: [:alpha:] kommt weder online vor noch in meinem manuall :(
Code:

if(preg_match("^([[:alpha:],._-]*)@([[:alpha:],._-]*)\.([[:alpha:],._-]*)$^", $Mail)) {
so schauts jetzt aus und es funzt.
danke nochmal an alle :)

käptn 07.04.2004 14:26

Hm - ja, wenn du "@." als E-Mail Adresse ansiehst :)

Verwende / als Begrenzer.
Verwende + statt * wenn min. 1 Zeichen erforderlich ist.

~

Potassium 07.04.2004 14:35

sry aber ich steh schon wieder auf der leitung:
begrenzer?
also vor dem . ein / oder wie?
btw habs jetzt so:

Code:

if(preg_match("^([[:alpha:],._-]+)@([[:alpha:],._-]+)\.([[:alpha:],._-]+)$^", $Mail)) {

käptn 07.04.2004 15:54

"/^...$/"

Hm, und ich glaub Beistriche willst auch net in der E-Mail, oder?

~

Potassium 07.04.2004 23:37

oh thx.
btw was nützen die begrenzer?

_m3 08.04.2004 09:34

Re: mail adresse mit neuen domäns prüfen
 
Zitat:

Original geschrieben von potassium
ich möchte eingegeben mailadresse auf richtigkeit überprüfen und da ist mir eingefallen das es mit einem "simplen"
PHP-Code:

if(ereg("^([A-Za-z_\.0-9]*)@([A-Za-z0-9_]*)\.([A-Za-z0-9\.]*)$",$Mail)) { 

nicht mehr getan ist weil es ja auch umlautdomains gibt.
nun meine frage: wie würde eine aktulle überprüfung aussehen?

Wie Du im aktuellen WCM nachlesen kannst, kommt fuer die Umlaut-Domains IDN zum Einsatz, man kann also nicht direkt nach ÄÖÜ suchen. Du suchst Dir einfach die entsprechende RFC und setzt die BNF der Syntax in eine RegEx um. Unter Perl gibts schon ein Script fuer sowas.

Zitat:

btw: was macht ^ am anfang und $ am ende und * in der mitte????
^ ... Beginn der Zeile
$ ... Ende der Zeile
* ... - bis n Wiederholungen des davor stehenden Zeichens

Potassium 08.04.2004 12:49

warum kann man nicht?
ist es nur nicht konform oder funkioniert es echt nicht?
ich frage deswegen weil ich es bei mir getestet hab mit irgedwas@übung.com oder dasistein@fuß.de und er hat es genommen...

_m3 08.04.2004 20:06

Weil IDN-Domains intern im Punycode verwaltet werden. Du gibts zwar im Browser "österreich.at" ein, das IDN-Plugin macht aber "xn--sterreich-z7a.at" draus. Und so werden die auch ueberall verarbeitet.

Potassium 08.04.2004 20:45

so und nun folgendes BITTE auf deutsch:
Zitat:

Du suchst Dir einfach die entsprechende RFC und setzt die BNF der Syntax in eine RegEx um.
ok RFC is klar das sind deine geliebten mega-textdateien ;)
aber WTF is BNF ?



_m3 08.04.2004 20:49

BNF ... Backus Naur Form
http://users.informatik.fh-hamburg.d...mp/node15.html

Potassium 08.04.2004 21:07

big thx.
btw du hast nicht zufällig die entsprechende RFC bei der hand oder :shy: :engel: :D
edit gefunden:
ftp://ftp.rfc-editor.org/in-notes/rfc3492.txt
ich hab versucht das zu verstehn aber da steig ich echt aus.....:(

_m3 08.04.2004 22:08

http://www.gnu.org/software/libidn/
und fuer unsere PHP-Freunde:
http://phpclasses.byting.at/browse/package/1509.html
Fuer die Perl-Monks gibt es natuerlich auch eine Loesung:
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
Man beachte die RegEx! :cool:

snowman 09.04.2004 10:00

@_m3: Alles schön und gut und richtig. Aber bei einer Formulareingabe einer e-mail-Adresse, welche dann vielleicht in einer Datenbank gespeichert wird, kommt das doch alles nicht zum Tragen. Da überprüfe ich doch die Eingabe, die die Umlaute enthält und speichere die auch genau so ab.

gruss,
snowman

_m3 09.04.2004 11:37

@snowman: Prinzipiell ja, da hast Du recht. Aber potassium wollte ja:
ich möchte eingegeben mailadresse auf richtigkeit überprüfen
Und da muss man den Punycode checken, da dieser an DNS, ... weitergegeben wird und nicht die Klartextdomain.

Und selbst, wenn ich "nur" irgedwas@übung.com nehme, ist das "ü" nun ISo8859-1, ISO8859-15, UTF-8, UTF-16 oder Windows-1250 encoded????? ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag