T. Collins: Regulärer Ausdruck

Einen wunderschönen guten Morgen!

um zu testen, ob die Zeichen, die bei der Eingabe einer E-Mail-Adresse verwendet wurden, gültig sind, hatte ich folgenden regulären Ausdruck verwendet:

if (eregi("[^a-z0-9_-.@]",$mem_email) {
    MECKERMELDUNG
  }

Funktionierte alles prima, bis auf die Verwendung des Minuszeichens:

My_Email@my-example.com wurde nicht akteptiert, My_Email@example.com hingegen schon.

Bis ich den Ausdruck umgestellt habe:

eregi("[^a-z0-9_.@-]",$mem_email)

Kann mir jemand erklären, warum die Position von - eine Rolle spielt?
Ach ja: ich arbeite nur sehr selten mit regulären Ausdrücken und bin da nicht sehr fit.

Grüße
T. Collins

  1. if (eregi("[^a-z0-9_-.@]",$mem_email) {
    eregi("[^a-z0-9_.@-]",$mem_email)

    Kann mir jemand erklären, warum die Position von - eine Rolle spielt?

    "-" ist ein Rangeoperator in einer Zeichenklasse, ausser der Context lässt eine Interpretation als Range nicht zu. Das ist eigentlich nur dann garantiert gegeben, wenn das Zeichen am Ende der Zeichenklasse steht.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hi Beat,

      klingt logisch. Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird und dass in vielen Dokumentationen - nicht am Ende des Ausdrucks steht.

      Danke für Antwort.

      Grüße
      T. Collins

      1. Was mich wundert ist...

        PCRE = Wunder geschehen.

        Perl
        "-" =~ /[a-z]/ and print "success";
        #success

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
      2. Hi,

        klingt logisch. Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird und dass in vielen Dokumentationen - nicht am Ende des Ausdrucks steht.

        Du hast vergessen, dass Du Deine Regular Expression noch in einen String-Kontext gebracht hast. Dort ist der Backslash ein Sonderzeichen und muss folglich maskiert werden. Dies hast Du vergessen; entsprechend verblieb in der RegExp nur das "-".

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird [...]

          Du hast vergessen, dass Du Deine Regular Expression noch in einen String-Kontext gebracht hast. Dort ist der Backslash ein Sonderzeichen und muss folglich maskiert werden. Dies hast Du vergessen; entsprechend verblieb in der RegExp nur das "-".

          Wenn also - in einem Regulären Ausdruck dem - die Bedeutung als Range Operator nimmt - wie notiere ich dann eigentlich den Wunsch nach einer Range von \ bis irgendwas ...?

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
          1. Hello,

            Wenn also - in einem Regulären Ausdruck dem - die Bedeutung als Range Operator nimmt - wie notiere ich dann eigentlich den Wunsch nach einer Range von \ bis irgendwas ...?

            mit escaptem Backslash?

            "   [\\-']   "

            oder

            '   [\-']    '

            würde ich mal annehmen...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de