Simon: Umlaute bei Validation

Hi,
hab bei meinem Kontaktformular eine Validation:

function verifiziereEmail ($testString) {
  if (eregi("^([[:alnum:]]|_|.|-)+@([[:alnum:]]|.|-)+(.)([a-z]{2,4})$", $testString)) {
    return 1;
 } else {
    return 0;
 }
}

Kann mir jemand sagen was ich machen muss dass es mir die Umlaute nicht mehr blockiert?

MfG
Simon

  1. Hallo,

    if (eregi("^([\w]|_|\.|-)+@([\w]|\.|-)+(\.)([a-z]{2,4})$", $testString))

    siehe auch \w bei Wikipedia.

    mfg, Flo

    --
    Developers are dying. Computers are getting trash. CEO's become forgetten. The only remaining things are ideas, lies and crises. So if you want to be immortal, first think, than stop it and go to microsoft and become later a manager at Lehman Brothers...
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
    *Zu dem de:> Ich benutze wegen IE im moment noch tabellen, weil dieser display:table noch nicht versteht. Ich werde aber, wenn IE 6 & IE 7 < 10% mein neues CSS-Layout einspielen...
  2. Moin!

    function verifiziereEmail ($testString) {
      if (eregi("^([[:alnum:]]|_|.|-)+@([[:alnum:]]|.|-)+(.)([a-z]{2,4})$", $testString)) {
        return 1;
    } else {
        return 0;
    }
    }

    Kann mir jemand sagen was ich machen muss dass es mir die Umlaute nicht mehr blockiert?

    Dein regulärer Ausdruck zur Abwehr ungültiger Mailadressen ist sowieso fehlerhaft. Er lehnt gültige Mailadressen ab, die Top-Level-Domains mit mehr als vier Zeichen nutzen. Derzeit existiert  mindestens die TLD ".museum", über die TLD ".africa" wird gerade diskutiert. Was sonst noch so erfunden werden wird, ist nicht absehbar. Aus diesem Grund ist jeglicher Versuch, bei der TLD irgendeine Längenbeschränkung einzuführen, grundsätzlich ungünstig und lieber zu unterlassen. Es würde nur zu ewigem Pflegeaufwand führen.

    Weiterhin erscheint mir der Teil, der die Subdomains checken soll, auch nicht so ganz kosher. Und zu guter Letzt hast du grundsätzlich das Problem, dass es ja mittlerweile Domains nicht nur mit ASCII-Zeichen gibt, sondern theoretisch beliebige Unicode-Zeichen möglich sind, und ein unbedarfter User die Domain vermutlich auch exakt so eingeben würde, und nicht den zugehörigen IDN-String.

    Zum Thema "Sonderzeichen im Local-Part" der Mailadresse verliere ich lieber gar kein weiteres Wort: Hier kann grundsätzlich alles vorkommen, solange man es nur korrekt escaped. Und wenn ein Mailserver mitspielt, ist Escaping vielleicht nicht mal korrekt notwendig.

    Im Grunde genommen reduziert sich die machbare Validierungsmöglichkeit auf zwei Alternativen:
    1. Entweder man checkt auf das Vorkommen eines @ und danach eines Punktes, sowie sonstiger Zeichen, die sich dazwischen und zwischen Stringanfang und Stringende befinden. Das führt zu folgendem Regex: ^.+@.+..+$
    2. Oder man validiert die Mailadresse, indem man letztendlich tatsächlich eine Mail an die Adresse sendet, um auf diese Weise ein Feedback des Mailboxinhabers zu erreichen, indem er einen in der Mail mitgeteilten, nicht durch dritte erratbaren Link aufruft, und so den Empfang bestätigt. Oder eine Mailantwort zurückschickt.

    Jegliche Zwischenstufen wie "Ich nutze extrem strenge Regex-Regeln für die Mailadresse" oder "Ich checke die Existenz der angegebenen Domain" sind im Verhältnis ziemlich aufwendig, bergen bei falscher Anwendung die Gefahr der irrtümlichen Zurückweisung, lassen aber letztendlich doch keinen direkten Schluss auf die Existenz und Korrektheit der Mailadresse zu. Dies gilt insbesondere deshalb, weil Mailserver heutzutage die unterschiedlichsten Anti-Spam-Maßnahmen ergreifen, welche in vielen Fällen auch auf einem Zeitfaktor basieren, d.h. eine Mail wird erst angenommen, nachdem der erste Sendeversuch abgewiesen wurde, und derselbe Mailserver es erneut versucht (Greylisting).

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
      1. Entweder man checkt auf das Vorkommen eines @ und danach eines Punktes, sowie sonstiger Zeichen, die sich dazwischen und zwischen Stringanfang und Stringende befinden. Das führt zu folgendem Regex: ^.+@.+..+$

      ein punkt nach dem klammeraffen? was ist mit adressen die lediglich auf lokale hostnamen verweisen? wie zb mail@localhost

      afaik ist gibts nur wenige indizien, die wirklich zu prüfen sind

      das vorhandensein des klammeraffens und mindestens 2 zeichen (1x davor und 1x dahinter)

      prüfen ob am stringanfang oder ende (vor dem klammeraffen, dem local-part) ein punkt vorkommt

      prüfen ob 2 punkte in folge auftreten

      1. Moin!

        1. Entweder man checkt auf das Vorkommen eines @ und danach eines Punktes, sowie sonstiger Zeichen, die sich dazwischen und zwischen Stringanfang und Stringende befinden. Das führt zu folgendem Regex: ^.+@.+..+$

        ein punkt nach dem klammeraffen? was ist mit adressen die lediglich auf lokale hostnamen verweisen? wie zb mail@localhost

        Wie willst du die im Kontext "Internet" erreichen? Unmöglich, würde ich sagen. Deshalb ist die Forderung nach mindestens einem Punkt hinter dem @ sinnvoll, weil anders die Top-Level-Domain nicht von einer Subdomain zu trennen ist.

        afaik ist gibts nur wenige indizien, die wirklich zu prüfen sind

        Deine Indizien sind allerdings fehlerhaft.

        das vorhandensein des klammeraffens und mindestens 2 zeichen (1x davor und 1x dahinter)

        Da es um internetweit erreichbare Mailadressen geht, ist das nicht ausreichend, es wird noch mindestens ein Punkt und ein weiteres Zeichen nach dem @ benötigt. Wenn man davon ausgeht, dass TLDs mit zwei Buchstaben auf ewig das Minimum bleiben werden, muss die kürzeste Mailadresse nach dem @ sogar vier Zeichen haben, insgesamt sechs Zeichen lang sein.

        Du erreichst auch SELFHTML über diese Domain: http://www.selfhtml.org.

        prüfen ob am stringanfang oder ende (vor dem klammeraffen, dem local-part) ein punkt vorkommt

        Eine Mailadresse darf durchaus mit einem Punkt beginnen, und die Domainangabe darf auch ohne Probleme mit einem Punkt enden.

        prüfen ob 2 punkte in folge auftreten

        Ist nur im Domainteil relevant.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Wie willst du die im Kontext "Internet" erreichen?

          ich ging von e-mail-adresse aus, nicht e-mail-adresse (nach rfc 2822) aus, im kontext "internet" wo im domain-part zwingend eine entsprechende domain stehen muss, sieht das anders aus

          Deine Indizien sind allerdings fehlerhaft.

          auf einer falschen annahme begründet, wie ich meine

          Da es um internetweit erreichbare Mailadressen geht, ist das nicht ausreichend, es wird noch mindestens ein Punkt und ein weiteres Zeichen nach dem @ benötigt. Wenn man davon ausgeht, dass TLDs mit zwei Buchstaben auf ewig das Minimum bleiben werden, muss die kürzeste Mailadresse nach dem @ sogar vier Zeichen haben, insgesamt sechs Zeichen lang sein.

          im kontext des internet ja, wenn man davon ausgeht dass es keine 1-zeichen-tlds oder 1-zeichen domains gibt bzw jemals geben wird

          prüfen ob am stringanfang oder ende (vor dem klammeraffen, dem local-part) ein punkt vorkommt
          Eine Mailadresse darf durchaus mit einem Punkt beginnen, und die Domainangabe darf auch ohne Probleme mit einem Punkt enden.

          natürlich darf die domain mit einem punkt enden, das tut sie in der regel ja auch - der local-part darf das aber nicht (siehe unten)

          prüfen ob 2 punkte in folge auftreten
          Ist nur im Domainteil relevant.

          so wie ich das rauslese, ist das im local-part relevant

          3.4.1. Addr-spec specification
             An addr-spec is a specific Internet identifier that contains a
             locally interpreted string followed by the at-sign character ("@",
             ASCII value 64) followed by an Internet domain.  The locally
             interpreted string is either a quoted-string or a dot-atom.  If the
             string can be represented as a dot-atom (that is, it contains no
             characters other than atext characters or "." surrounded by atext

          wenn im local-part ein punkt nur von atext umschlossen sein darf, impliziert dass, dass ein punkt nicht am anfang oder ende des local-part vorkommen darf sowie dass ein punkt nicht 2x in folge auftreten darf (da er ja sonst nicht beidseitig von atext umschlossen wäre)

          1. ich ging von e-mail-adresse aus, nicht e-mail-adresse (nach rfc 2822) aus, im kontext "internet" wo im domain-part zwingend eine entsprechende domain stehen muss, sieht das anders aus

            mschlossen wäre)

            argl - ich bin von e-mail im sinne von rfc 2822, nicht von e-mail-adresse im internet-kontext ;)

          2. Moin!

            Da es um internetweit erreichbare Mailadressen geht, ist das nicht ausreichend, es wird noch mindestens ein Punkt und ein weiteres Zeichen nach dem @ benötigt. Wenn man davon ausgeht, dass TLDs mit zwei Buchstaben auf ewig das Minimum bleiben werden, muss die kürzeste Mailadresse nach dem @ sogar vier Zeichen haben, insgesamt sechs Zeichen lang sein.
            im kontext des internet ja, wenn man davon ausgeht dass es keine 1-zeichen-tlds oder 1-zeichen domains gibt bzw jemals geben wird

            Es gibt 1-Zeichen-Domains: x.org
            Ob es je 1-Zeichen-TLDs geben wird, ist fraglich, aber nicht unmöglich.

            prüfen ob am stringanfang oder ende (vor dem klammeraffen, dem local-part) ein punkt vorkommt
            Eine Mailadresse darf durchaus mit einem Punkt beginnen, und die Domainangabe darf auch ohne Probleme mit einem Punkt enden.
            natürlich darf die domain mit einem punkt enden, das tut sie in der regel ja auch - der local-part darf das aber nicht (siehe unten)

            Stimmt, wenn man die Spec genau liest, wird ein endständiger Punkt mindestens noch von einem Quotezeichen umschlossen, er steht also nie ganz außen.

            prüfen ob 2 punkte in folge auftreten
            Ist nur im Domainteil relevant.

            so wie ich das rauslese, ist das im local-part relevant

            Das ist wiederum falsch. Local-parts sind nicht nur dot-atom, sondern auch quoted-string - und dort ist sozusagen alles möglich.

            Und genau diese Möglichkeit macht es eigentlich unmöglich, einen wirklich "einfachen" regulären Ausdruck zu formulieren.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Es gibt 1-Zeichen-Domains: x.org

              nicht gewusst, wieder das gelernt ;)

              Ob es je 1-Zeichen-TLDs geben wird, ist fraglich, aber nicht unmöglich.

              wenn es jemals die tld "g" geben wird, bin ich der erste der sich die domain "m" darunter registiert und eine sich eine mailadresse mit mit dem benutzernamen "o" einrichtet ;)

              Und genau diese Möglichkeit macht es eigentlich unmöglich, einen wirklich "einfachen" regulären Ausdruck zu formulieren.

              ich hab auch nie behauptet, dass es einfach wäre - drum hab ich ja gesagt, dass man sich auf das minimum beschränken muss - aber das ist scheinbar auch nicht so einfach

              und lt. gunnar ist nichtmal die existenz des @-zeichens ein indiz dafür, dass es eine gültige mailadresse ist ;)

              1. Moin!

                und lt. gunnar ist nichtmal die existenz des @-zeichens ein indiz dafür, dass es eine gültige mailadresse ist ;)

                Im Kontext "Internet" - und nur den kann man sinnvollerweise meinen, wenn man ein Formularfeld "Mailadresse" auf einer im Internet erreichbaren Seite anbietet - allerdings nicht.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Im Kontext "Internet" - und nur den kann man sinnvollerweise meinen, wenn man ein Formularfeld "Mailadresse" auf einer im Internet erreichbaren Seite anbietet - allerdings nicht.

                  das ist natürlich richtig ;) aber es gibt ja auch intranet-anwendungen - wobei ich bezweifle, dass dies sehr praxisnahe ist - in den meisten größeren unternehmen werden auch zur internen kommunikation e-mail-adressen inklusive domain-part verwendet

      2. @@suit:

        ein punkt nach dem klammeraffen? was ist mit adressen die lediglich auf lokale hostnamen verweisen? wie zb mail@localhost

        Ein Klammeraffe? Was ist mit Adressen, die lediglich auf lokale Usernamen verweisen? Wie z.B. johndoe

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
        1. Ein Klammeraffe? Was ist mit Adressen, die lediglich auf lokale Usernamen verweisen? Wie z.B. johndoe

          das geht?