Frage zu Regex
RuD
- php
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
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
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
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
Danke, so ausfuehrlich war zwar nicht noetig. Aber nioch mal vielen Dank.
RuD