Frage zu regulären Ausdrücken



  • Hallo!

    Hoffentlich bin ich nicht ins falsche Forum gerutscht, aber ich glaube hier paßt meine Frage hin...
    Ansonsten bitte info an mich.

    Ich habe einen String in dem nur Grossbuchstaben und Zahlen erlaubt sind, z.B. "DZ500VA100MB"

    Mit [A-z0-9]+ bekomme ich einen positiven match, aber leider auch, wenn der String "DZ500VA100Mb" lautet.

    Mit negieren [^a-z] oder gruppieren ([^a-z][A-Z0-9]) bekomme ich auch einen positiven match.

    Ich habe schon div. Tutorials im I-net durchforstet, bin aber nicht fündig geworden.

    Den quasi umgekehrten Weg zu gehen (also auf verbotene Zeichen zu suchen und bei einem pos. match entsprechend zu reagieren) würde eine zus. Funktion im meinem Code erfordern, was ich gerne vermeiden möchte.
    Außerdem muß ich dann sicher sein wirklich alle verbotenen Zeichen zu erfassen.

    Hat jemand eine Idee oder einen hifreichen link?

    Ciao

    OkkaPapa



  • Generell reicht "[A-Z0-9]+". Viele Regex-Bibliotheken melden aber auch dann ein erfolgreiches Match, wenn nur ein Teilstring auf den Ausdruck passt. Um das zu verhindern muss man entweder eine Funktion nehmen, die explizit den gesamten String prüft (sofern verfügbar), oder den Regex zu "^[A-Z0-9]+$" ändern.



  • [A-z0-9]+
    steht da wirklich (groß) A bis (klein) z?
    Dann hat du da einen Fehler gemacht. Dann erkennt dein Regex eben auch [ \ ] ^ _ `` und die Kleinbuchstaben. Nach der Definition erkennt[A-z]alle Zeichen vonAscii(A) = 65bisAscii(z) = 172` , was eben die oben genannten Zeichen erfasst.

    Was willst du eigentlich genau erreichen?

    • Nur Großbuchstaben zulassen: [A-Z0-9]+
    • Großbuchstaben und Kleinbuchstaben zulassen: [A-Za-z0-9]+
    • Nur Großbuchstaben, außer am Ende: [A-Z0-9]+[A-Za-z]


  • ipsec schrieb:

    Generell reicht "[A-Z0-9]+". Viele Regex-Bibliotheken melden aber auch dann ein erfolgreiches Match, wenn nur ein Teilstring auf den Ausdruck passt. Um das zu verhindern muss man entweder eine Funktion nehmen, die explizit den gesamten String prüft (sofern verfügbar), oder den Regex zu "^[A-Z0-9]+$" ändern.

    Komsich, kaum macht man es richtig, dann klappt es...

    Danke!

    Hast mir ne Maenge Arbeit erspart!!!

    Ciao

    OkkaPapa



  • Rhombicosidodecahedron schrieb:

    [A-z0-9]+
    steht da wirklich (groß) A bis (klein) z?
    Dann hat du da einen Fehler gemacht. Dann erkennt dein Regex eben auch [ \ ] ^ _ `` und die Kleinbuchstaben. Nach der Definition erkennt[A-z]alle Zeichen vonAscii(A) = 65bisAscii(z) = 172` , was eben die oben genannten Zeichen erfasst.

    Was willst du eigentlich genau erreichen?

    • Nur Großbuchstaben zulassen: [A-Z0-9]+
    • Großbuchstaben und Kleinbuchstaben zulassen: [A-Za-z0-9]+
    • Nur Großbuchstaben, außer am Ende: [A-Z0-9]+[A-Za-z]

    Sorry, habe nicht kopiert, sondern getippt (muß leider zwischen 2 Compis switchen): soll heißen [A-Z0-9]

    Ziel ist, daß nur Grossbuchstaben und Zahlen drin vorkommen dürfen.

    Dafür habe ich schon eine Antwort bekommen, die paßt.

    Ich muß den Ausdruck auf den ganzen String anwenden und nicht nur auf die einzelnen Zeichen.

    Ciao

    OkkaPapa


Anmelden zum Antworten