akutaktiv: Regexp und ASP

Ich will einen Mustervergleich unter ASP durchfuehren, nur funktioniert das uebrehaupt nicht.
Folgendes Beispiel:
  Set regEx = New RegExp
  regEx.Pattern = "[^a-z]"
  response.write regEx.test(variable)

Hat variable den Wert 'a' wird FALSE ausgegeben, was ja auch richtig ist.

Hat variable den Wert '1' wird TRUE ausgegeben, was auch richtig ist.

Nur wenn die Variable den Wert '1a' hat wird auch TRUE ausgegeben, was meinem Verstaendnis nach falsch ist, weil ja in der Zeichenkette immerhin ein Buchstabe vorkommt, der durch das Muster ja aber eigentlich ausgeschlossen ist.
Oder was sehe ich falsch?
Auch der Einsatz eines Quantifiers bringt mich nicht weiter.

Im Endeffekt will ich nur testen, ob eine eingegebene Zeichenkette wirklich nur Buchstaben und Ziffern enthaelt und nichts anderes.

*Uhhhhhhhhhhh*, ich will das lieber mit PERL machen, aber es muss unter ASP laufen *Uhhhhhhhhhhh*

Bye Bernd

  1. hi!

    Ich will einen Mustervergleich unter ASP durchfuehren, nur
    funktioniert das uebrehaupt nicht.

    Was noch zu beweisen wäre... :)

    Folgendes Beispiel:
      Set regEx = New RegExp
      regEx.Pattern = "[^a-z]"
      response.write regEx.test(variable)

    Der reguläre Ausdruck gibt nicht an, die der _gesamte_ String aussehen
    soll, sondern nur, wie ein _Teil_ des Strings aussehen soll. In diesem
    Fall erwartet dein Regexp also, dass in dem String ein Zeichen vor-
    kommt, das kein Kleinbuchstabe (a-z) ist. Im String "1a" kommt die 1
    vor, das ist kein Kleinbuchstabe, daraus folgt: der reguläre Ausdruck
    wird in deinem String gefunden.

    Wenn du Aussagen über den kompletten String machen willst, musst du
    bei regulären Ausdrücken auch auf String-Anfang und -Ende überprüfen.
    Zum Beispiel so (in Perl):
      $variable =~ m/[1]*$/;

    ^ ist der String-Anfang, $ das String-Ende. Und dazwischen dürfen
    nur (allerdings beliebig viele) Nicht-Kleinbuchstaben stehen.

    bye, Frank!


    1. ^a-z ↩︎

    1. Wenn du Aussagen über den kompletten String machen willst, musst du
      bei regulären Ausdrücken auch auf String-Anfang und -Ende überprüfen.
      Zum Beispiel so (in Perl):
        $variable =~ m/[1]*$/;

      ^ ist der String-Anfang, $ das String-Ende. Und dazwischen dürfen
      nur (allerdings beliebig viele) Nicht-Kleinbuchstaben stehen.

      Jetzt habe ich folgendes eingesetzt

      Set regEx = New RegExp
        regEx.Pattern = "[2][1-9][A-Z]*$"
        response.write regEx.test("a1A")

      Es wird ein TRUE ausgeliefert, was richtig ist.
      Nur wenn ich jetzt
        response.write regEx.test("aA")
      setze kommt ein FALSE.
      So wie ich das sehe, macht der einen positionsabhaengigen Vergleich, was aber absolut unbrauchbar ist, oder?

      Bernd


      1. ^a-z ↩︎

      2. a-z ↩︎

      1. hi!

        Set regEx = New RegExp
          regEx.Pattern = "[1][1-9][A-Z]*$"
          response.write regEx.test("a1A")

        Das macht ja nun was völlig anderes als der vorherige. Dieser Ausdruck
        hier schaut nach, ob das erste Zeichen des Strings ein Kleinbuchstabe
        ist, ob dann eine Ziffer folgt und ob danach beliebig viele Groß-
        buchstaben folgen. Also ist ja logisch, was unten als Ergebnis raus-
        kommt.

        So wie ich das sehe, macht der einen positionsabhaengigen Vergleich,
        was aber absolut unbrauchbar ist, oder?

        Keine Ahnung. Du hast ja nicht verraten, was du eigentlich erreichen
        willst. Außerdem empfehle ich, mal in SELFHTML das Kapitel über
        reguläre Ausdrücke im CGI/Perl-Teil durchzulesen. Du scheinst dir
        damit noch etwas schwer zu tun.

        bye, Frank!


        1. a-z ↩︎

        1. Keine Ahnung. Du hast ja nicht verraten, was du eigentlich erreichen

          Doch, habe ich doch geschrieben.
          Ich moechte nur pruefen, ob ein eingegebner Wert nur aus Buchstaben und Ziffern besteht.

          willst. Außerdem empfehle ich, mal in SELFHTML das Kapitel über
          reguläre Ausdrücke im CGI/Perl-Teil durchzulesen. Du scheinst dir
          damit noch etwas schwer zu tun.

          Nur unter ASP.
          Unter PERL komme ich hervorragend damit zurecht.

          Bernd

          1. Hi Bernd,

            Ich moechte nur pruefen, ob ein eingegebner Wert nur aus Buchstaben
            und Ziffern besteht.

            ich übersetze mal: Du möchtest prüfen, ob Dein eingegebener Wert
            ausschließlich (von Anfang bis Ende) aus Zeichen besteht, von denen
            jedes einzelne in der Menge aller (Buchstaben plus Ziffern) enthalten
            ist.

            Und jetzt formuliere genau dies als regular expression ...

            Viele Grüße
                  Michael