berdn: ereg

Hallo tolles Forum,

ich habe in einem mySQL Textfeld werte wie 5 Bruttomieten als auch Euro-Werte die immer zwei Kommastellen haben (1.000,00 | 85,67).
Nu, will ich Wenn es ein Euro-Wert ist auch immer Euro dahinter schreiben.

Das hier scheint ganz gut zu klappen

if(ereg ("([0-9]{1}),([0-9]{1,2})",$myValue)) {
    $EURO = "EUR";
  }
  else{
   $EURO = "";
  }

Ist das Gut so, geht es besser ?

Liebe Grüße,

von Bernd der PHP lernt

  1. Hi,

    if(ereg ("([0-9]{1}),([0-9]{1,2})",$myValue)) {

    hiermit triffst Du eine Ziffer, gefolgt von einem Komma und ein oder zwei Ziffern, mitten im String.

    Ist das Gut so, geht es besser ?

    Letzteres.

    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
    1. Hi Cheatah,

      besser ist immer gut ;-)

      a.) es fehlt der Zusatz am string Ende ?
      b.) preg_replace ist besser ?

      Grüße,

      Bernd

      1. Hi,

        a.) es fehlt der Zusatz am string Ende ?

        sagen wir es so: Dein Pattern funktioniert _zufällig_, wenn bestimmte Kriterien erfüllt sind. Im Zusammenhang mit dem übrigen Code kann man aber auch sagen, es funktioniert _nicht_. Du solltest noch mal zurück in die Konzeptphase und Dir überlegen, was Du da eigentlich haben willst.

        b.) preg_replace ist besser ?

        preg halte ich allgemein für besser als ereg, aber das erachte ich hier als zweitrangig.

        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
        1. Hallo Cheatah,

          ich denke darüber nach aber es fällt mir nicht wirklich eine andere Lösung ein. Also ich habe ein Textfeld in dem z.B. stehen kann:
          "5 Bruttomieten"
          "1.045,67"
          "875,00"

          Als Ergebnis will ich haben das alle "Zahlen"-Werte einen "EUR" an das Ende bekommen sollen.

          Als einziges Kriterium sehe ich die letzten drei Zeichen an, weil bei Zahlen Werten immer nach den Komma zwei Zahlen kommen.

          Für ein kleinen Anstoß wäre ich doch recht Dankbar,

          Bernd

          1. Hi,

            ich denke darüber nach aber es fällt mir nicht wirklich eine andere Lösung ein.

            ich rate Dir auch nicht zu einer _anderen_ Lösung, sondern nur zu einer richtigen ;-) Deine aktuelle RegExp entspricht nicht Deinen Bedürfnissen.

            Also ich habe ein Textfeld in dem z.B. stehen kann:

            Wie sieht das Muster aus, um nur die richtigen Werte zu erhalten?

            Als einziges Kriterium sehe ich die letzten drei Zeichen an, weil bei Zahlen Werten immer nach den Komma zwei Zahlen kommen.

            Okay, dann formuliere dies. Bedenke dabei ggf. auch die Angabe "42,--".

            Für ein kleinen Anstoß wäre ich doch recht Dankbar,

            Der Weg stimmt, Du bist nur gestolpert.

            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. gudn tach Bernd!

            Also ich habe ein Textfeld in dem z.B. stehen kann:
            "5 Bruttomieten"
            "1.045,67"
            "875,00"

            ist das komma also schon ein hinreichendes merkmal dafuer, dass da ein zahlenwert drinsteht? oder koennte auch sowas wie "3,4 bruttomieten" drinstehen?

            falls das komma hinreichend ist, brauchst du nicht mal regulaere ausdruecke verwenden, sondern bist mit strpos() oder strstr() besser bedient.
            (auf http://de2.php.net/manual/en/function.preg-match.php steht: "Tip: Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.")

            das ganze koennte also z.b. so aussehen:
            $EURO=(strpos($myValue,',')===false)?"":"EUR";
            (mehr zu der ?: - syntax: http://de2.php.net/manual/en/language.expressions.php)

            falls das komma allein nicht hinreichend ist, aber z.b. /\d,\d\d$/ (also ziffer, komma, ziffer, ziffer, end_of_string), dann sind regulaere ausdruecke komfortabler. an dieser stelle ein hinweis von http://de2.php.net/manual/en/function.ereg.php zu ereg():
            "Note: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg()."

            noch eine anmerkung zu deinem urspruenglichen regexp:
            ([0-9]{1})
            klammern sind hier nicht noetig, also:
            [0-9]{1}
            das wiederum ist gleichbedeutend mit
            [0-9]
            und das laesst sich kuerzer schreiben als
            /d
            .

            prost
            seth