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.