Enrico: Problem mit regulärem Ausdruck

Hallo,

ich versuche gerade, einen String, der aus einer Textdatei stammt, darauf hin zu prüfen, ob er nur aus einem Geldbetrag besteht.

Zum Hintergrund:
Wenn der reguläre Ausdruck nicht zutrifft, dann gibt es zu dem eingelesenen Artikel weitere Ausführungen (entweder eine andere Größe oder/und unterschiedliche Farben).

Es sollen folgende Punkte geprüft werden:

  • Teil 1 (optional): Eine Ziffer, gefolgt von einem Punkt als Tausender-Trennzeichen
  • Teil 2 (verpflichtend): Mindestens eine Ziffer, aber maximal drei Ziffern
  • Teil 3 (optional): Komma, gefolgt von genau zwei Ziffern

Mein derzeitiger Ansatz (Testausgabe) sieht wie folgt aus:

  
   <?php  
  
      echo "1,45: " . preg_match ("/^(d{1}\.)?d{1,3}(\,d{2})?$/", "1,45");  
  
   ?>  

Mein Beispiel liefert mir Null zurück, d.h. es findet kein Matching statt, obwohl der Betrag 1,45 ein echter Geldbetrag ist.

Was stimmt an meinem regulären Ausdruck nicht?

Vielen Dank für eure Hilfe und an alle, die heute Weihnachten feiern, ein schönes Fest und geruhsame Feiertage, an alle, die eher dem Julfest zugewandt sind, nachträglich ein schönes Fest und ebenso geruhsame Feiertage und dem Rest einfach nur geruhsame Feiertage :-)

Gruß,
Enrico

  1. [latex]Mae  govannen![/latex]

    echo "1,45: " . preg_match ("/^(d{1}.)?d{1,3}(,d{2})?$/", "1,45");

      
    
    > Was stimmt an meinem regulären Ausdruck nicht?  
      
    ... zunächst einmal, daß du auf den Buchstaben „d“ testest und nicht auf die numerische Zeichenklasse. Sonstiges nicht getestet.  
      
    Stur lächeln und winken, Männer!  
    Kai  
    
    -- 
    „Die Borg würden nicht mal Spaß verstehen, wenn sie einen Vergnügungspark assimiliert hätten!” (B'Elanna Torres)  
      
    [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)  
    
    
    1. Hallo Kai,

      danke, der Hinweis war des Wurzels Übel :-)
      Fix einen Backslash vor allen d's ergänzt und schon funktioniert es!

      Danke Dir!

      Gruß,
      Enrico

  2. Tach!

    Wenn der reguläre Ausdruck nicht zutrifft, dann gibt es zu dem eingelesenen Artikel weitere Ausführungen (entweder eine andere Größe oder/und unterschiedliche Farben).

    Was steht dann in dem Feld? Irgendwas anderes oder ist es leer? Wenn es nicht leer ist, solltest du vielleicht auch bei Textdateien dir die Normalisierung von Daten zu Gemüte führen. Wenn es hingegen leer ist, kannst du das einfach mit empty() abfragen.

    dedlfix.

    1. Hallo dedlfix,

      ich muss folgende Fälle unterscheiden:

      1. Welche der Produkte haben NUR einen eindeutigen Preis haben, aber KEINE Größen- UND Farbvarianten?
      2. Welche der Produkte haben welche Farb-, aber KEINE Größenvarianten?
      3. Welche der Produkte haben welche Größen-, aber KEINE Farbvarianten?
      4. Welche der Produkte haben welche Größen- UND Farbvarianten?

      Übergeben und gekennzeichnet werden die Strings, die ich aus einer Textdatei einlesen und nachfolgend mittels explode aufteile mit speziellen Flags.

      Lasse ich beispielsweise die Produkte der Rubrik "Rüstzeug für den Kopf" ausgeben (im allgemeinen Helme, die sich nur durch deren Größen unterscheiden), dann hat ein Datensatz der zugehörigen Textdatei folgenden Aufbau:

      Rüstzeug für den Kopf 1|Dies ist die Beschreibung zu Artikel "Rüstzeug für den Kopf 1"|GroesseS#39,90#M#47,80#L#53,20#XL#64,60|Stück[ENDE]

      Bei Produkten der Rubrik "Gewandung für den Körper" muss ich aber sowohl verschiedene Größen, als auch verschiedene Farben berücksichtigen und habe hier deshalb in jedem Datensatz der zugehörigen Textdatei beide Flags "Groesse" und "Farbe":

      Gewandung für den Körper 1|Dies ist die Beschreibung zu Artikel "Gewandung für den Körper 1"|GroesseS#39,70#M#45,50#L#53,90#XL#62,40~Farbe|Stück[ENDE]

      Beim Flag "Farbe" wird später noch aus der Textdatei Farben.txt ein eigener Datensatz eingelesen und ich bilde schließlich den Gesamtpreis aus dem Preis der gewählten Größe und dem Aufschlag durch die Farbvariante.

      Gruß
      Enrico

      1. Tach!

        ich muss folgende Fälle unterscheiden:

        Und bist du sicher, dass das mit einzeiligen Textdateien eine so gute Idee ist? Als Alternative bietet sich nicht nur SQLite an. Ein serialisiertes Array lässt sich auf einfachste Weise einlesen, jedoch (fast) nur mit PHP selbst bearbeiten. Aber auch Ini-Dateien bieten einige Möglichkeiten der Strukturierung von Daten.

        dedlfix.

  3. hi,

    ich versuche gerade, einen String, der aus einer Textdatei stammt, darauf hin zu prüfen, ob er nur aus einem Geldbetrag besteht.

    Ok, schöne Aufgabe.

    Zum Hintergrund:
    Wenn der reguläre Ausdruck nicht zutrifft, dann gibt es zu dem eingelesenen Artikel weitere Ausführungen (entweder eine andere Größe oder/und unterschiedliche Farben).

    Hintergrund und Aufgabe passen nicht zusammen. Du baust Dir hier Abhängigkeiten, die am Ende schwer zu durchschauen sind. Wie wärs mit einem Artikel-Attribut 'Vary'? Ich bin in Sachen Warenwirtschaft auch nur ein Laie, aber ich würde hier an der Stelle mit klar definierten Attributen arbeiten, welche einen Artikel beschreiben, der in verschiedenen Farben oder Größen oder anderen Variationen (Bärenfell/Fuchsfell...) auftreten kann.

    Schönes Fest!
    Hotti