Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Shell: eMail-Syntax prüfen

  1. #1
    Bugs1984
    Gast

    Shell: eMail-Syntax prüfen

    Hallo,
    ich muss gleich zu Beginn sagen, dass ich ein Shell/Bash-Anfänger bin und ich stehe vor einem für mich größerem Problem.

    Ich möchte eine eMail-Adresse auf ihre Syntax prüfen.
    z.B. email@test.adresse.de

    ich möchte
    1. "email" und "test.adresse.de" in ein 2-elementiges Array speichern
    2. "email" Zeichen für Zeichen durchgehen und prüfen, ob keine Sonderzeichen etc. vorkommen und "email" darf max. 100 zeichen haben
    3. "test.adresse.de" darf auch keine Sonderzeichen beinhalten insgesamt nur 100 Zeichen haben, wobei in diesem beispiel "test", "adresse" und "de" jeweils nur max. 50 Zeichen haben darf (also jedes Wort das mit einem Punkt getrennt ist)

    Kann mir jemand helfen wie ich das anstelle? Geht das irgendwie mit regulären Ausdrücken oder muss man das wirklich mit Schleifen implementieren?

    Danke schon mal an alle Hilfsbereiten!

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    ja, das kannst du mit einem regulären Ausdruck überprüfen.
    Such mal im Internet nach "email address regexp", da finden sich einige Beispiele. Um die Ausdrücke an deine Längenangaben anzupassen, kannst du mal http://de.wikipedia.org/wiki/Regexp lesen.

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Bugs1984
    Gast
    danke schon mal.

    aber wie kann ich den letzten Teil hinter dem @ mit regEx ausdrücken?
    also quasi
    ([a-z][A-Z][0-9]._-+){1,50}\.([a-z][A-Z][0-9]._-+){1,50}

    aber halt noch dass beliebig oft dahinter .[a-z]...{1,50} usw. kommen darf und der ganze hintere teil max. 200 Zeichen haben darf

  4. #4
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    In dem Fall kommst du wohl nicht mit einem Ausdruck aus. Du könntest erst überprüfen, ob der Aufbau vom Prinzip her passt und in einem zweiten Schritt schauen, ob die Länge nach dem @ Zeichen <= 100 (bzw. 200) ist.
    Ein gebrechlich Wesen ist der X-Server.

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    innerhalb eines regulären Ausdrucks kann man das wohl nicht abbilden, aber mit Hilfe des sed trotzdem in einem Rutsch prüfen:
    Code:
    echo 'email@test.adresse.de' | \
      sed -rn '/^[A-Za-z0-9_-]{1,100}@[A-Za-z0-9_.-]{1,200}/{
               s/.+@//
               : lbl
               s/^[A-Za-z0-9_-]{1,50}\.//
               t lbl
               /^[A-Za-z0-9_-]{1,50}$/=}'
    Der sed wird mit den Optionen für extended regex und "halts Maul" (keine Ausgabe) gestartet.

    Im sed läuft folgendes ab:

    Zeile 1- führe die Kommandos in den {} nur aus, wenn die Eingabe aus max. 100 Buchstaben, Ziffern, "_" oder "-" vor dem Klammeraffen und max. 200 Buchstaben, Ziffern, "_", "-" und "." nach dem Klammeraffen besteht

    Zeile 2 - entferne alles inkl. Klammeraffe, übrig bleibt der Domain-Anteil.

    Zeile 3 - definiere eine Sprungmarke "lbl"

    Zeile 4 - entferne vom Beginn des Rests alle Buchstaben, Ziffern, "_" oder "-", die max. 50 Zeichen lang sind und von einem Punkt gefolgt werden. Damit wird ein nach Deiner Definition gültiger Domainpart am Anfang entfernt.

    Zeile 5 - wenn in Zeile 4 eine Ersetzung stattgefunden hat, dann springe zurück zur Sprungmarke "lbl". Damit wird in einer Schleife jeder gültige Domainteil bis auf den letzten nacheinander entfernt

    Zeile 6 - wenn der verbliebene Rest nur aus Buchstaben, Ziffern, "_" oder "-" besteht, dann gib die Zeilennummer aus.

    Wenn Du den sed aufrufst, dann kriegst Du nur dann eine "1" zu sehen, wenn die Adresse Deinen Anforderungen genügt, ansonsten wird nichts ausgegeben. Das kannst Du dann so testen:
    Code:
    if test -n "`echo ... | sed '...'`"; then
      echo OK
    else
      echo Fehler
    fi
    Bitte noch durchtesten, ich habs nur oberflächlich gemacht.

    Noch ein Hinweis: Die Einzelregex müssten eigentlich noch verfeinert werden - am Beginn einer Adresse oder eines Domainteils darf z. B. kein "_" oder "-" stehen.

    Jan

    P.S.: Wenn Du Dir genauer angucken willst, was der sed macht, dann setze jeweils an das Ende der sed-Zeilen 2 und 4 die Zeichenfolge ";p", damit wird Dir ausgegeben, was nach den Ersetzungen übrig bleibt.

    EDIT: Noch eine Variante - praktisch, wenn Du aus einer Datei eine Liste von Adressen prüfen willst. Ich habe den sed-Teil mal in eine eigene Scriptdatei gepackt:
    Code:
    jan@jack:~/tmp> cat chk_addr.sed
    /^[A-Za-z0-9_-]{1,100}@[A-Za-z0-9_.-]{1,200}/{
      h
      s/.+@//
      : lbl
      s/^[A-Za-z0-9_-]{1,50}\.//
      t lbl
      /^[A-Za-z0-9_-]{1,50}$/{g;p}
    }
    jan@jack:~/tmp> sed -rnf chk_addr.sed adressen.txt
    email@meine.adresse.de
    e_mail-addr@meine2.mail_adresse.de
    Neu ist die Zeile 2: Der Inhalt der Adresse wird vor dem Zerpflücken in den Haltepuffer kopiert. In der letzten Zeile des sed-Scripts wird dann bei Erfolg der Haltepuffer wieder zurückgeholt und dann ausgegeben. Damit gibt das sed-Kommando dann nur die gültigen Adressen aus der Datei "adressen.txt" aus.
    Geändert von jan61 (11-06-2009 um 15:05 Uhr) Grund: Korrektur Länge Domainpart

  6. #6
    Bugs1984
    Gast
    viele dank für deine Hilfen und Mühen.
    Das hilft mir ja schon mal weiter
    dann mach ich mich mal ans bauen...und wenn alles nichts hilft code ich es quick'n'dirty mit ganz vielen IFs ^^

  7. #7
    Registrierter Benutzer
    Registriert seit
    01.04.2009
    Ort
    Essen
    Beiträge
    25
    quick & clean & correct

    Code:
    sidburn@sid:~$ perl -MEmail::Valid -wle 'print Email::Valid->address($ARGV[0]) ? "Valid" : "Invalid"' "sid.burn@example.com"
    Valid
    Aber ich weiß, für nen Bash Frickler ist das zu einfach und zu korrekt. Lieber wird Tage verschwendet um eine unqick & dirty & uncorrect Version zusammenzuschustern.

    Okay für deine komischen weiteren beschränken müsste man noch code hinzufügen, aber zumindest prüft dieses schnipsel auf eine valide email Adresse, was die bisherigen Beispiele nicht tun.
    Geändert von Sid Burn (12-06-2009 um 17:16 Uhr)
    Falsch zu liegen ist kein Misserfolg. Es sollte gefeiert werden, da die Erkenntnis etwas Falsch gemacht zu haben Verstehen und Erkenntnis auf ein neues Level anhebt.

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Sid Burn Beitrag anzeigen
    ...Aber ich weiß, für nen Bash Frickler ist das zu einfach und zu korrekt. Lieber wird Tage verschwendet um eine unqick & dirty & uncorrect Version zusammenzuschustern.
    WÜRDEST DU DICH BITTE MAL ETWAS ZUSAMMENREISSEN? Mir reichts langsam mit Deinen Unverschämtheiten!

    Wenn Du bash-Bashing treiben willst, dann mach ein eigenes Forum auf und halt Dich hier raus!

    Jan

  9. #9
    Registrierter Benutzer
    Registriert seit
    01.04.2009
    Ort
    Essen
    Beiträge
    25
    Zitat Zitat von jan61 Beitrag anzeigen
    WÜRDEST DU DICH BITTE MAL ETWAS ZUSAMMENREISSEN? Mir reichts langsam mit Deinen Unverschämtheiten!
    Deine Aussage würde bedeuten das ich das ständig bisher mache, kannst du Quellen dazu liefern?

    Und nebenbei sind da am ende des Satzes nicht umsonst zwei Smileys. Ein zwinkendes Smiley hat folgende bedeutung.

    http://www.vtxnet.ch/community/chat/smilies.asp
    > ;-) Lächeln mit Augenzwinkern, Ironie

    Und da im Internet eben Ausdrucksweise nicht übertragen wird, kann man solche Smileys nicht einfach ignorieren. Wenn du soetwas nicht verstehst dann tut es mir leid.

    Wenn Du bash-Bashing treiben willst, dann mach ein eigenes Forum auf und halt Dich hier raus!
    Wäre ich lediglich auf Bash-Bashing hinaus dann hätte ich den Threadstarter keine Lösung für eine E-Mail Validierung gezeigt.

    Die Kritik auch wenn es Ironie ist, dass die bash nicht geeignet ist (auch sed,awk) um eine E-Mail zu validieren und das es deutlich einfacher geht muss man letztendlich hinnehmen. Hätten diese Sachen ein Modulsystem etc. würde es anders ausschauen, aber das haben Sie nicht. Immer wieder das Rad von vorne zu bauen halte ich ziemlich Sinnlos. Der Threadstarter kann selber wählen was er benötigt und was evtl. besser für ihn passt.
    Geändert von Sid Burn (13-06-2009 um 02:25 Uhr)
    Falsch zu liegen ist kein Misserfolg. Es sollte gefeiert werden, da die Erkenntnis etwas Falsch gemacht zu haben Verstehen und Erkenntnis auf ein neues Level anhebt.

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Sid Burn Beitrag anzeigen
    Und nebenbei sind da am ende des Satzes nicht umsonst zwei Smileys. Ein zwinkendes Smiley hat folgende bedeutung.
    Ach so - mit einem Smiley versehen, kannst Du jede Herabsetzung durch die Welt schicken? Du irrst! Eine Unverschämtheit wird nicht automatisch zu Ironie, wenn man ein Smiley dahinter setzt. Und Deine Oberlehrer-Bemerkungen wie "Ein zwinkendes Smiley hat folgende bedeutung" kannst Du Dir auch schenken - ich weiß, was das bedeutet.

    Zitat Zitat von Sid Burn Beitrag anzeigen
    Wäre ich lediglich auf Bash-Bashing hinaus dann hätte ich den Threadstarter keine Lösung für eine E-Mail Validierung gezeigt.
    Das war aber nicht das Hauptproblem. Regex für die Validierung einer Mailadresse kannst Du Dir tonnenweise aus dem Netz ziehen (bzw. selbst bauen, es gibt ja RFCs dafür), es ging um die zusätzlichen Anforderungen. Dazu hast Du gar nichts beigetragen - ach doch: "Okay für deine komischen weiteren beschränken müsste man noch code hinzufügen" - tolle Hilfe. Mit "komischen" weiteren Beschränkungen gibt man sich ja nicht ab, wenn man kein "Bah-Frickler" ist, nicht wahr?

    Zitat Zitat von Sid Burn Beitrag anzeigen
    Die Kritik auch wenn es Ironie ist, dass die bash nicht geeignet ist (auch sed,awk) um eine E-Mail zu validieren
    Wieder eine Deiner aus der Luft gegriffenen (bzw. Deinen eigenen Ansichten folgenden) Behauptungen, die sich vor allem durch das Fehlen jeglicher handfester Begründungen auszeichnen.

    Weißt Du was? Ich habe keine Lust mehr, mich über Deinen Quark aufzuregen. Viel Spaß noch hier im Forum, vielleicht finden ja andere Deinen Stil "lustig". Ich habe keinen Bock mehr auf Dein Gelaber.

    Bye
    Jan

  11. #11
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    Zitat Zitat von jan61 Beitrag anzeigen
    Weißt Du was? Ich habe keine Lust mehr, mich über Deinen Quark aufzuregen. Viel Spaß noch hier im Forum, vielleicht finden ja andere Deinen Stil "lustig". Ich habe keinen Bock mehr auf Dein Gelaber.

    Bye
    Jan
    das war jetzt aber hoffentlich nicht die Verabschiedung aus dem Forum!? Für solche Fälle steht dir die Ignorierliste zur Verfügung.

    Zitat Zitat von jan61 Beitrag anzeigen
    Und Deine Oberlehrer-Bemerkungen wie "Ein zwinkendes Smiley hat folgende bedeutung" kannst Du Dir auch schenken - ich weiß, was das bedeutet.
    Die Oberlehrerbemerkung im Zusammenhang mit der lausigen Rechtschreibung und Zeichensetzung in Sid Burns Posting hat allerdings schon einen gewissen Charm.

    Und zum Thema "quick & clean & correct" wollte ich noch beitragen:
    $ perl -MEmail::Valid -wle 'print Email::Valid->address($ARGV[0]) ? "Valid" : "Invalid"' "sid.burn@example.com"
    Can't locate Email/Valid.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.10.0 /usr/share/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl /usr/lib/perl5/current /usr/lib/perl5/site_perl/current .).
    BEGIN failed--compilation aborted.
    , hier würde es für mich ziemlich schnell unquick werden; Jans Lösung macht in diesem Fall aber genau das, was sie soll.

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  12. #12
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Beiträge
    21
    Zitat Zitat von ContainerDriver Beitrag anzeigen
    [...] hier würde es für mich ziemlich schnell unquick werden [...]
    Code:
    $ time perl -MCPAN -e 'install Email::Valid'
    [...]
    real    0m26.800s
    user    0m8.573s
    sys     0m1.704s

  13. #13
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Zitat Zitat von pertze Beitrag anzeigen
    Code:
    $ time perl -MCPAN -e 'install Email::Valid'
    [...]
    real    0m26.800s
    user    0m8.573s
    sys     0m1.704s
    Wenn man denn auch die Berechtigung dazu hat...
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  14. #14
    Registrierter Benutzer
    Registriert seit
    01.04.2009
    Ort
    Essen
    Beiträge
    25
    Zitat Zitat von jeebee Beitrag anzeigen
    Wenn man denn auch die Berechtigung dazu hat...
    Wenn du den "cpan" Befehl als Benutzer startest dann fragt er dich in der Konfiguration wo du die Module hin installieren möchtest. Daher kannst du sowas auch mit normalen Benutzerrechten machen und deine Module lokal in irgendein Verzeichnis installieren.


    Jans Lösung macht in diesem Fall aber genau das, was sie soll.
    Code:
    sidburn@sid:~$ cat addressen.txt 
    email@meine.adresse.de
    e_mail-addr@meine2.mail_adresse.de
    asdf
    -@-
    sid.burn@example.org
    123456789012345678901234567890123456789012345678901234567890-1234567890@1234567890123456789012345678901234567890.de
    
    sidburn@sid:~$ sed -rnf chk_addr.sed  addressen.txt 
    email@meine.adresse.de
    e_mail-addr@meine2.mail_adresse.de
    -@-
    123456789012345678901234567890123456789012345678901234567890-1234567890@1234567890123456789012345678901234567890.de
    Zum Beispiel invalide email addressen wie "-@-" als gültig anerkennen und gültige addressen wie "sid.burn@example.org" als ungültig zu erkennen?

    Weiterhin waren die bedingungen das die email nicht größer als 100 zeichen sein darf. Die letzte ist allerdiengs 115 Zeichen lang und wird trotzdem als gültige ausgegeben.

    Eine weitere Begrenzung war das die abschnitte nur jeweils maximal 50 Zeichen groß sein dürfen. Der erste teil meiner letzten email ist allerdiengs 61 Zeichen lang und wird ebenfalls als gültig anerkannt.

    Um es also zusammenzufassen. Das ganze macht keine Validierung von eMail Adressen, weder noch erfüllt es irgendeine bedingung des Thread erstellers. Eine Antwort das er Gestern Abend Würstchen zu Abendbrot gegessen hat, wäre letztendlich genauso hilfreich gewesen.


    EDIT: Habe die Bedingungen nochmals durchgelesen, anscheind habe ich sie beim ersten Lesen falsch verstanden. Mit "email" meinte er wohl den "User" Anteil und nicht die "email" an sich. Dann wird jan61 lösung zumindest bei den bedingungen etwas besser. Punkt 3 wird aber immer noch nicht erfüllt da solch eine email adresse "123@12345678901234567890.12345678901234567890.123 45678901234567890.12345678901234567890.12345678901 234567890.de" trotzdem noch als valide angesehen wird, die bedingung lautet aber alles nach "@" 100 Zeichen. Das sind allerdiengs 107 Zeichen. Aber von diesen Bedingungen halte ich ja sowieso nichts (wie ich hiernach ja schon schreiben werde).



    Den kleinen Schnipsel den ich gepostet habe validiert allerdiengs eine eMail Adresse auf RFC Konformität. Zusätzlicher Code für die bedingungen habe ich deswegen nicht geschrieben da ich es für mich sinnlos halte. Das was ich aus der Anfrage heraus lese ist wie man eine email adresse validieren kann. Das tut dies. Durch die zusätzlichen Begrenzungen die er auffült mit 50 zeichen hier und da, das macht eine eMail Adresse nicht valider, eher im Gegenteil, es shließt eventuelle Gültige email Adressen aus.

    Möchte man Wissen ob ein Benutzer wirklich eine korrekte eMail Adresse eingegeben hat, so könnte man beispielsweise bei Email::Valid noch den "mxcheck" hinzufügen. Das macht dann eine DNS abfrage und schaut ob die Domain wirklich existiert.

    Dadurch werden auch emailadressen wie "sid.burn@jan61.de" als nicht valide angesehen auch wenn sie RFC Konform sind weil die Domain z.B. gar nicht existiert. Allerdiengs setzt soetwas natürlich eine funktionierende Internet verbindung vorraus, und macht das überprüfen natürlich langsamer.

    Code:
    sidburn@sid:~$ perl -MEmail::Valid -wle 'print Email::Valid->address( -address => $ARGV[0], -mxcheck => 1 ) ? "Valid" : "Not Valid"' sid.burn@jan61.de
    Not Valid
    Natürlich kann man keine Accounts testen, soetwas ist aber sinvoller zur Validierung als das was sich der TE anscheind dadrunter vorstellt.

    Zumindest sind dann solche Sätze Lustig.
    Mit "komischen" weiteren Beschränkungen gibt man sich ja nicht ab, wenn man kein "Bah-Frickler" ist, nicht wahr?
    Anscheind ist es toller sich mit den bedinungen auseinanderzusetzen, dann allerdiengs eine Lösung zu präsentieren die weder die hauptaufgabe (validieren von emails) noch die zusätzlichen aufgaben erfüllt.

    Und tut mir leid, wer sich wie jan61 so aufregt weil ich "Bash-Frickler" sagte den kann eh nicht mehr geholfen werden. Vorallem da ich es als "Ironie" getagt habe und nochmals daraufhin gewiesen habe das es Irnoie war.

    Wer soetwas dann nicht versteht tut mir wirklich leid, hätte ich mit wilden Beleidigungen angefangen wäre das eine andere Sache gewesen, sich aber über so ein flapsiges Kommentar so aufzuregen wo dann "der Spaß aufhört" ist in meinen Augen einfach nur lächerlich.

    Aber okay, Personen mit Humor im negativen bereich gibt es anscheind wirklich.

    Vorallem war das ja noch eher ein kompliment. Nur ich als Perl-Frickler weiß was frickeln wirklich bedeutet und habe die höchsten schwarzen Gürtel des Frickelns erlangt. Wenn also ein Perl Programmierer sagt du frickelst, sollte man sich geehrt fühlen.
    Geändert von Sid Burn (26-06-2009 um 18:14 Uhr)
    Falsch zu liegen ist kein Misserfolg. Es sollte gefeiert werden, da die Erkenntnis etwas Falsch gemacht zu haben Verstehen und Erkenntnis auf ein neues Level anhebt.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •