Regexp und ASP
akutaktiv
- asp.net
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
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!
^a-z ↩︎
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
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!
a-z ↩︎
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
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