Heizer: RegExp will nicht so wie ich wohl will

Liebes Forum

Ich habe eigentlich eine einfache Aufgebenstellung, aber leider kenne ich mich mit RegExp nicht so gut aus, deshalb:

[0-9]{1,3}(.[0-9]{0,2})?

Diese RegExp habe ich mithilfe des RE-Testers von jEdit geschrieben, in dem Sie auch wunderbar funktioniert. Sie soll ermitteln, ob eine Preisangabe korrekt ist, d.h. drei Stellen vor dem Komma, zwei dahinter, wenn kein Komma, dann ist es auch gut.
Match: 1.23 12.34 123.45
       1.2  12.3  123.4
       1.   12.   123.
       1    12    123
Der String, der ein Match gibt, obwohl er es nicht sollte ist ".1" und ".12" und ich weiß nicht wesshalb!

Kann mir da jemand helfen?

Danke Heizer

  1. Hi

    Ich habe eigentlich eine einfache Aufgebenstellung, aber leider kenne ich mich mit RegExp nicht so gut aus, deshalb:

    [0-9]{1,3}(.[0-9]{0,2})?

    Diese RegExp habe ich mithilfe des RE-Testers von jEdit geschrieben, in dem Sie auch wunderbar funktioniert. Sie soll ermitteln, ob eine Preisangabe korrekt ist, d.h. drei Stellen vor dem Komma, zwei dahinter, wenn kein Komma, dann ist es auch gut.
    Match: 1.23 12.34 123.45
           1.2  12.3  123.4
           1.   12.   123.
           1    12    123
    Der String, der ein Match gibt, obwohl er es nicht sollte ist ".1" und ".12" und ich weiß nicht wesshalb!

    ganz einfach: der erste Teil des RegEx matcht auf die 1 oder die 12 (erlaubt sind 1 bis 3 Ziffern, die werden gefunden). Es wird ja nicht festgelegt, daß es auf die Ziffern am Stringanfang matchen soll.

    Du mußt den Regex am Stringanfang und Ende verankern, so daß er den ganzen String matchen muß.

    ^ macht das für den Anfang, $ für das Ende, also zusammen:
    [1]{1,3}(.[0-9]{0,2})?$

    Andreas


    1. 0-9 ↩︎

    1. Hi

      Ich habe eigentlich eine einfache Aufgebenstellung, aber leider kenne ich mich mit RegExp nicht so gut aus, deshalb:

      [0-9]{1,3}(.[0-9]{0,2})?

      Du mußt den Regex am Stringanfang und Ende verankern, so daß er den ganzen String matchen muß.

      ^ macht das für den Anfang, $ für das Ende, also zusammen:
      [1]{1,3}(.[0-9]{0,2})?$

      Vielen dank, das klappt. Aber vielleicht noch eine Frage: Ich mache das ja jetzt mit ereg(), wie würde es denn mit preg_match() aussehen?

      Heizer


      1. 0-9 ↩︎

  2. eine antwort weiß ich zwar nicht denn preg_replace usw komm ich voll nicht klar :D

    aber im php4-forum.de wird man dir sicherlich helfen...