Regulärer Ausdruck: Suchmuster funktioniert nicht!?
Stefan Janssen
- perl
0 Chris0 Frank Schönmann
Hallo,
lt. SelfHTML wird mit
/[a-zA-Z0-9_]/
überprüft, ob die zu prüfende Zeichenkette mindesten eins der Zeichen vom Typ Buchstabe (ohne Umlaute), vom Typ Ziffer oder einen Unterstrich enthält.
Dann müsste ich doch mit
/[a-zA-Z0-9]@[a-zA-Z0-9].[a-zA-Z0-9]/
überprüfen können, ob es sich evtl. um eine Email-Adresse handelt
Das Suchmuster funktioniert vor dem '@' und nach dem '.' auch so, wie ich es mir gedacht habe. Aber zwischen @ und . wird nur ein Zeichen (Buchstabe oder Zahl) als korrekt erkannt.
Etwas konkreter:
irgendwas@a.irgendwas wird als Email-Adresse erkannt,
irgendwas@ab.irgendwas wird nicht erkannt.
Es funktioniert auch dann nicht, wenn ich das @ nicht maskiere.
Gruß
SJ
Hi,
/[a-zA-Z0-9_]/
entspricht \w
/[a-zA-Z0-9]@[a-zA-Z0-9].[a-zA-Z0-9]/
überprüfen können, ob es sich evtl. um eine Email-Adresse handelt
/\w+@\w+.\w+/
Wobei jetzt wahrscheinlich wieder 4711 Beiträge kommen, die darauf hinweisen, daß diese Lösung nicht in 100% aller Fälle funktioniert, sondern nur in 99%...
Bindestriche solltes du aber noch berücksichtigen
HTH
Chris
hi!
/\w+@\w+.\w+/
Funktioniert überhaupt nicht wie gewünscht, weil du vergessen hast,
den Punkt zu maskieren.
HTH
Kaum, weil du nicht mal erklärt hast, was er falsch gemacht hat. Ganz
abgesehen von dem Fehler mit dem nicht maskierten Punkt.
bye, Frank!
hi!
lt. SelfHTML wird mit
/[a-zA-Z0-9_]/
überprüft, ob die zu prüfende Zeichenkette mindesten eins der
Zeichen vom Typ Buchstabe (ohne Umlaute), vom Typ Ziffer oder
einen Unterstrich enthält.
Ich hoffe nicht, dass das Wörtchen "mindestens" auch so in SELFHTML
steht, dann wäre es nämlich falsch. Obige Zeile überprüft, ob eines
-- zwar nicht _genau_ eines, aber auch nicht _mindestens_ eines --
der angegebenen Zeichen in der Zeichenkette vorkommt. Der reguläre
Ausdruck oben matcht allerdings nur auf genau ein Zeichen des Strings
und nicht auf mehrere.
Dann müsste ich doch mit
/[a-zA-Z0-9]@[a-zA-Z0-9].[a-zA-Z0-9]/
überprüfen können, ob es sich evtl. um eine Email-Adresse handelt
Siehe oben. Überprüft wird, ob folgendes im String vorkommt: genau
ein Zeichen aus \w, dann ein @, dann genau ein Zeichen aus \w, dann
ein Punkt, dann genau ein Zeichen aus \w.
Wenn du an irgendeiner der Stellen auf _mehrere_ Zeichen überprüfen
willst, musst du Quantifier verwenden, also {,}, + oder *. Genauere
Informationen hierzu findest du auch wieder in SELFHTML. Jedenfalls
müsste es etwa folgendermaßen aussehen:
/\w+@\w+.\w+/
Dann überprüft er, ob im String vorkommt: mindestens ein Zeichen aus
\w, dann ein @, dann mindestens ein Zeichen aus \w, dann ein Punkt,
dann mindestens ein Zeichen aus \w.
\w ist eine abkürzende Schreibweise für u.a. [a-zA-Z9-0] und bedeutet
soviel wie "allgemein lesbare Zeichen" oder so... ;)
bye, Frank!
ps. Ob man @-Zeichen in regulären Ausdrücken maskieren muss, weiß
ich gerade nicht auswendig. Ich vermute aber nein.
Überprüft wird, ob folgendes im String vorkommt: genau
ein Zeichen aus \w, dann ein @, dann genau ein Zeichen aus \w, dann
ein Punkt, dann genau ein Zeichen aus \w.
das würde ja bedeuten, dass nur z.B. a@b.c erkannt wird, aber dem ist nicht so, abc@d.efg wird auch erkannt.
/\w+@\w+.\w+/
Dann überprüft er, ob im String vorkommt: mindestens ein Zeichen aus
\w, dann ein @, dann mindestens ein Zeichen aus \w, dann ein Punkt,
dann mindestens ein Zeichen aus \w.
Leider werden dann aber auch Umlaute als korrekt angesehen.
\w ist eine abkürzende Schreibweise für u.a. [a-zA-Z9-0] und bedeutet
soviel wie "allgemein lesbare Zeichen" oder so... ;)
incl. ä,ö,ü,Ä,Ö,Ü (je nach System)
bye, Frank!
Gruß
Stefan
ps. Ob man @-Zeichen in regulären Ausdrücken maskieren muss, weiß
ich gerade nicht auswendig. Ich vermute aber nein.
stimmt
hi!
das würde ja bedeuten, dass nur z.B. a@b.c erkannt wird, aber dem
ist nicht so, abc@d.efg wird auch erkannt.
Weil, wie ich heute schonmal gesagt habe, der reguläre Ausdruck nicht
mit dem kompletten String verglichen wird, sondern mit jedem Teil-
String davon. Bei "abc@d.efg" würde er also auf das "c@d.e" matchen,
völlig unbedeutend, was da vorher oder nachher noch kommt.
[\w]
Leider werden dann aber auch Umlaute als korrekt angesehen.
Glaube ich noch nicht so ganz, aber das kann man notfalls umgehen,
indem man eben doch wieder Zeichenklassen selbst angibt, oder die
Länderinformation ändert.
bye, Frank!
Bei "abc@d.efg" würde er also auf das "c@d.e" matchen,
völlig unbedeutend, was da vorher oder nachher noch kommt.
Als ich die Nachricht abgeschickt habe, fiel's mir im gleichen Moment auch wieder ein.
[\w]
Leider werden dann aber auch Umlaute als korrekt angesehen.
Glaube ich noch nicht so ganz,
Ist aber so, habe es ausprobiert.
Ich denke Mal ich nehme das mit den Umlauten einfach in Kauf.
Vielen Dank und schönen Abend noch.
Gruß
SJ
Moin!
Ich denke Mal ich nehme das mit den Umlauten einfach in Kauf.
Vielen Dank und schönen Abend noch.
Würde ich an deiner Stelle nicht machen, denn GÜLTIGE (!!!) EMail-Adressen sind dann doch noch etwas komplexer, also du gerade abprüfst.
Beispiele
adresse@subdomain.domain.de
Mit anderen Worten: Du richtest mit deinem regulären Ausdruck mehr Schaden an, als dir bis hierher bewußt ist - weil EMail-Adressen eben NICHT so simpel sind, wie du es gerade denkst.
Zum Glück gibts gegen alle Wehwehchen ein Self-Mittel:
EMail-Adresse mit Javascript prüfen: http://aktuell.de.selfhtml.org/artikel/javascript/email-check/index.htm
Regulärer Ausdruck für Mailadressen (mit Erklärungen, englisch): http://www.phpbuilder.com/columns/dario19990616.php3?page=3
Diverse reguläre Ausdrücke für alle Lebenslagen ;) : http://regxlib.com/ (Mails stehen ganz obenan)
- Sven Rautenberg
hi!
Ich denke Mal ich nehme das mit den Umlauten einfach in Kauf.
Vielen Dank und schönen Abend noch.
Würde ich an deiner Stelle nicht machen, denn GÜLTIGE (!!!) EMail-
Adressen sind dann doch noch etwas komplexer, also du gerade
abprüfst.
GÜLTIGE (!!!) eMail-Adressen kann man mit überhaupt keinem regulären
Ausdruck überprüfen, denn erst die Einrichtung einer entsprechenden
Adresse irgendwo auf der Welt macht sie gültig. Von diesem Standpunkt
aus ist es sowieso relativ, ob man eine irgendwo eingegebene eMail-
Adresse auf korrekte Form nach RFC 819 überprüft, weil mich, wenn ich
eine falsche eMail-Adresse angeben will, auch kein komisches RFC-
Check-Skript daran hindern wird.
Zum Glück gibts gegen alle Wehwehchen ein Self-Mittel:
Warum in der Ferne schweifen, wenn das Gute so nahe liegt. Oder so
ähnlich... ,)) Jedenfalls sind im Archiv mehrere Links auf den
entsprechenden RFC-Checker, der hier im Forum verwendet wird... :)
bye, Frank!
Hi Frank,
Würde ich an deiner Stelle nicht machen, denn GÜLTIGE (!!!) EMail-
Adressen sind dann doch noch etwas komplexer, also du gerade
abprüfst.
GÜLTIGE (!!!) eMail-Adressen kann man mit überhaupt keinem regulären
Ausdruck überprüfen, denn erst die Einrichtung einer entsprechenden
Adresse irgendwo auf der Welt macht sie gültig.
ich schlage vor, den Begriff "gültig" durch "syntaktisch korrekt" bzw.
"semantisch korrekt" etc. zu ersetzen.
Viele Grüße
Michael
hi!
ich schlage vor, den Begriff "gültig" durch "syntaktisch korrekt"
bzw. "semantisch korrekt" etc. zu ersetzen.
Das ist ein sinnvoller Vorschlag, wäre aber langweilig, weil es dann
schwieriger ist, sich über unklar definierte Begriffe misszuverstehen.
;)
bye, Frank!
ich schlage vor, den Begriff "gültig" durch "syntaktisch korrekt" bzw.
"semantisch korrekt" etc. zu ersetzen.
Oder 'gültige Emailadressenschreibweise', so wie ich's weiter oben schon geschrieben habe.
Aber da die meisten schon wussten, was ich meine sehe ich da keinen Anlass zu.
Außerdem: Eine 'gültige' Emailadresse muss ja nicht unbedingt eine 'existierende' Emailadresse sein.
SJ
GÜLTIGE (!!!) eMail-Adressen kann man mit überhaupt keinem regulären
Ausdruck überprüfen, denn erst die Einrichtung einer entsprechenden
Adresse irgendwo auf der Welt macht sie gültig. Von diesem Standpunkt
Gültige Emailadressenschreibweise ;)
aus ist es sowieso relativ, ob man eine irgendwo eingegebene eMail-
Adresse auf korrekte Form nach RFC 819 überprüft, weil mich, wenn ich
eine falsche eMail-Adresse angeben will, auch kein komisches RFC-
Check-Skript daran hindern wird.
Bei mir wird etwas per Automailer angefordert, die Prüfung soll nur eine Hilfestellung sein, damit der User sich nicht wundert, wieso das angeforderte nicht in seinem Mail-Eingang ist. Durch die Überprüfung soll er nur auf eventuelle Tippfehler hingewiesen werden.
Jedenfalls sind im Archiv mehrere Links auf den
entsprechenden RFC-Checker, der hier im Forum verwendet wird... :)
Der hier verwendet wird??? Dann schick mir doch mal 'ne Mail.
SJ
Beispiele
adresse@subdomain.domain.de
- ist gültig, wird aber wegen der zwei Punkte im Domainteil nicht erkannt.
adresse@212.234.33.333- ist gültig, wird aber ebenfalls nicht erkannt.
adresse@t-online.de- ist ebenfalls gültig, wird aber wegen dem Bindestrich nicht erkannt.
vorname.nachname@provider.de- scheitert an dem Punkt im Usernamen.
Hab's schon bemerkt.
Mit anderen Worten: Du richtest mit deinem regulären Ausdruck mehr Schaden an, als dir bis hierher bewußt ist - weil EMail-Adressen eben NICHT so simpel sind, wie du es gerade denkst.
Als simpel habe ich Email-Adressen ja auch nicht bezeichnet nur wenn ich die Erklärung von /\w/ lese, die da heißt:
"passt auf eine Zeichenkette, die (mindestens) eins der Zeichen vom Typ Buchstabe, vom Typ Ziffer oder einen Unterstrich enthält - (fast) genau wie (9.); ob Umlaute erkannt werden können, hängt von der Systemkonfiguration ab."
dann gehe ich davon aus (egal ob das 'mindestens' hier zutrifft oder nicht), dass /\w/ den String "-a-ß@~§.ä/?$+* " auch als korrekt erkennt, da ja ein Zeichen (das 'a') die Bedingung erfüllt.(Auch wenn mir das bei meinem Email-Problem nicht weiterhilft)
Ich wollte halt ein Suchmuster haben, das überprüft ob vor dem '@', zwischen '@' und '.' sowie hinter dem '.' mindestens ein Buchstabe oder eine Zahl steht (NICHT mindestens irgend ein Zeichen).
Zum Glück gibts gegen alle Wehwehchen ein Self-Mittel:
EMail-Adresse mit Javascript prüfen: http://aktuell.de.selfhtml.org/artikel/javascript/email-check/index.htm
Leider deaktivieren immer mehr User die Ausführung von JavaScript im Browser.
Diverse reguläre Ausdrücke für alle Lebenslagen ;) : http://regxlib.com/ (Mails stehen ganz obenan)
Hab's mir angesehen und als 'noch verwirrender' zu den Akten gelegt.
Trotzdem Danke für die Antwort.
Gruß
SJ
Hi Frank,
lt. SelfHTML wird mit
/[a-zA-Z0-9_]/
überprüft, ob die zu prüfende Zeichenkette mindesten eins der
Zeichen vom Typ Buchstabe (ohne Umlaute), vom Typ Ziffer oder
einen Unterstrich enthält.
Ich hoffe nicht, dass das Wörtchen "mindestens" auch so in SELFHTML
steht, dann wäre es nämlich falsch. Obige Zeile überprüft, ob eines
-- zwar nicht _genau_ eines, aber auch nicht _mindestens_ eines --
der angegebenen Zeichen in der Zeichenkette vorkommt. Der reguläre
Ausdruck oben matcht allerdings nur auf genau ein Zeichen des Strings
und nicht auf mehrere.
Dein Posting verwirrt mich.
Nur wenn keines der Zeichen vorkommt, wird kein Match erzielt - und
"mindestens eines der Zeichen" ist in diesem Falle m. E. das Gegenteil
von "keines".
Ich halte die genannte SelfHTML-Aussage also irgendwie für korrekt ...
Viele Grüße
Michael
hi!
lt. SelfHTML wird mit
/[a-zA-Z0-9_]/
überprüft, ob die zu prüfende Zeichenkette mindesten eins
der Zeichen vom Typ Buchstabe (ohne Umlaute), vom Typ Ziffer
oder einen Unterstrich enthält.
Dein Posting verwirrt mich.
Hm, also im Endeffekt ist die entsprechende Aussage in SELFHTML doch
irgendwie korrekt, lässt sich aber nicht richtig verallgemeinern. Wozu
das führt, hat man ja am Fragesteller gemerkt...
Klarer wäre die Aussage, wenn sie lauten würde, dass obiger regulärer
Ausdruck überprüft, ob im String an irgendeiner beliebigen Stelle genau
eines der aufgelisteten Zeichen vorkommt.
bye, Frank!