Forum Doku Wiki Blog

Forumsarchiv 2006, Februar
Frage zu Regex

archivierte Beiträge lesen

  1. (PHP) Frage zu Regex von RuD, 17. 02. 2006, 09:59

Frage zu Regex

Der folgende Beitrag wurde am 17. 02. 2006, 09:59 Uhr von RuD veröffentlicht.

Hallo,
ich versuche krampfhaft eine Regex hinzukriegen:
er soll auf jede Art von Waehrungsformatierung passen:

(\$[0-9]{1,4}\.[0-9]{0,2})|(\$[0-9]{1,4})|([0-9]{1,4}\$)|([0-9]{1,4}\.[0-9]{0,2}\$)

kommt mir schon ein bisschen lang vor!

er soll auf $12.30, $12, 12$, 12.30$, $12,30 usw. passen

wie kann man festlegen, das z.B. ein Dollarzeichen davor oder dahointer stehen kann aber nicht muss. Oder ein Punkt oder Komma in der Mitte, aber nur wenn danach noch zwei Zahlen kommen?


Tschau
--
                       __
      ________   _____/ //
     / ___   // / __   //
    / //  / //_/ /_/  //
   /_//  /___________//

Frage zu Regex

Der folgende Beitrag wurde am 17. 02. 2006, 10:23 Uhr von RuD veröffentlicht.

Hi, habs selbst verkuerzt aber ganz gefaellts mir nicht:

ich denke ganz opimal isses noch ne:

(\${0,1}[0-9]{1,4}\.{0,1}\,{0,1}[0-9]{0,2}\${0,1})


Tschau
--
                       __
      ________   _____/ //
     / ___   // / __   //
    / //  / //_/ /_/  //
   /_//  /___________//

Frage zu Regex

Der folgende Beitrag wurde am 17. 02. 2006, 10:40 Uhr von MudGuard veröffentlicht.

Hi,

> Hi, habs selbst verkuerzt aber ganz gefaellts mir nicht:
>
> ich denke ganz opimal isses noch ne:
>
> (\${0,1}[0-9]{1,4}\.{0,1}\,{0,1}[0-9]{0,2}\${0,1})

{0,1} kann man als ? schreiben.

$123.,$

wird von Deinem Ausdruck auch gefunden.

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter

Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.

Frage zu Regex

Der folgende Beitrag wurde am 17. 02. 2006, 10:38 Uhr von MudGuard veröffentlicht.

Hi,

> Hallo,
> ich versuche krampfhaft eine Regex hinzukriegen:
> er soll auf jede Art von Waehrungsformatierung passen:
>
> (\$[0-9]{1,4}\.[0-9]{0,2})|(\$[0-9]{1,4})|([0-9]{1,4}\$)|([0-9]{1,4}\.[0-9]{0,2}\$)
>
> kommt mir schon ein bisschen lang vor!
>
> er soll auf $12.30, $12, 12$, 12.30$, $12,30 usw. passen

Also: zwei Alternativen: Währungsbezeichner + Zahl bzw. Zahl + Währungsbezeichner

(\$|USD ?)zahl|zahl(\$| ?USD)

Zahl soll sein (wenn ich Dich richtig verstanden habe:
Vorkommateil evtl. gefolgt von Dezimaltrenner + 2 Nachkommastellen

Vorkommateil: [0-9]+ bzw. \d+ wenn Dein Regextool \d unterstützt

Dezimaltrenner + 2 Nachkommastellen: [.,]\d{2} bzw. [.,][0-9]{2}

zahl ist also: \d+([.,]\d{2})?  bzwl. [0-9]+([.,][0-9]{2})?

Zusammen mit dem Rest:

(\$|USD ?)\d+([.,]\d{2})?|\d+([.,]\d{2})?(\$| ?USD)
bzw.
(\$|USD ?)[0-9]+([.,][0-9]{2})?|[0-9]+([.,][0-9]{2})?(\$| ?USD)

Wenn Du die Einzelteile nicht benötigst, kannst Du die () noch durch (?:) [i.e. non-capturing parentheses] ersetzen, das macht die Sache etwas performanter.

Also
(?:\$|USD ?)[0-9]+(?:[.,][0-9]{2})?|[0-9]+(?:[.,][0-9]{2})?(?:\$| ?USD)

(die Variante für \d überlasse ich Dir ;-)

Wenn das ganze jetzt noch an Wortgrenzen steht, kann man nochmal etwas Performance rausholen, indem man \b(?: )\b um das ganze legt:

\b(?:(?:\$|USD ?)[0-9]+(?:[.,][0-9]{2})?|[0-9]+(?:[.,][0-9]{2})?(?:\$| ?USD))\b

Wenn Du nur $ als Währungszeichen hast, kannst Du natürlich aus (?:\$| ?USD) einfach \$ machen.

> wie kann man festlegen, das z.B. ein Dollarzeichen davor oder dahointer stehen kann aber nicht muss. Oder ein Punkt oder Komma in der Mitte, aber nur wenn danach noch zwei Zahlen kommen?

Mit Zahlen meinst Du ja vermutlich Ziffern, oder?

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter

Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.

Frage zu Regex

Der folgende Beitrag wurde am 17. 02. 2006, 10:53 Uhr von RuD veröffentlicht.

Danke, so ausfuehrlich war zwar nicht noetig. Aber nioch mal vielen Dank.

RuD

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4