Mark: Sch**** reguläre Ausdrücke - Hilfe

hi,

ich könnt mich echt aufregen.

also in einem textfeld kann der user ein preis angeben. das prog soll nun überprüfen ob der user auch den preis eingegeben hat.

die eingabe darf so aussehen:

8.000,00
8.000
8000,00
8000

und ich krieg das einfach nicht hin.

danke im voraus

  1. Hallo,

    was hast du denn bis jetzt probiert?

    gruss

    --
    no strict;
    no warnings;
    1. Hallo,

      was hast du denn bis jetzt probiert?

      if($q->param('price') !~ /^\d(.*)\d[,.]\d*$/) {
      $error[5] = "Bitte geben Sie einen gültigen Preis an.<br>\n";
      }

      1. Hi,

        /^\d(.*)\d[,.]\d*$/

        eine Ziffer, gefolgt von beliebig vielen beliebigen Zeichen (bis auf Umbrüche), gefolgt von einer Ziffer, gefolgt von einem Komma oder einem Punkt, gefolgt von beliebig vielen Ziffern.

        Denk noch einmal gründlich drüber nach, wie das Muster eigentlich aussieht, welches Du erkennen möchtest, was optionale und was zwingende Zeichen(-ketten) sind usw. Das einzig Richtige an obiger RegExp ist der Einsatz von "^" und "$".

        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
      2. Hi,

        »»/^\d(.*)\d[,.]\d*$/
                     ^^^
        Du weisst schon, dass Zeichen, die eine besondere Bedeutung haben, maskiert werden muessen wenn nach dem urspruenglichen Zeichen gesucht werden soll? Der Punkt steht fuer jedes beliebige Zeichen.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. Hi,

          »»/^\d(.*)\d[,.]\d*$/
                       ^^^
          Du weisst schon, dass Zeichen, die eine besondere Bedeutung haben, maskiert werden muessen wenn nach dem urspruenglichen Zeichen gesucht werden soll? Der Punkt steht fuer jedes beliebige Zeichen.

          nein, steht er nicht. Jedenfalls nicht an der von Dir markierten Stelle.

          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
  2. Moin, moin!

    Mir scheint
    ^((\d+)|(\d{1,3}(.\d{3})+))(,\d{2}){0,1}$
    eine geeignete Lösung zu sein, die auch noch
    8.888.888,00
    etc akzeptiert und
    8888.888
    zurückweist.

    Also
    beliebig viele Ziffer
      ODER
    1 bis 3 Ziffer
    gefolgt von mindestens
    einer Gruppe aus einem Punkt und drei Ziffern

    Danach ein Komma und 2 Ziffern
    kein mal
      ODER
    ein mal

    Alles klar?

    Norbert

    1. Moin, moin!

      Mir scheint
      ^((\d+)|(\d{1,3}(.\d{3})+))(,\d{2}){0,1}$

      die lösung ist endsgut.

      Vielen Dank.