# Regex für Dezimalzahl. Problem mit Nachkommastellen



## Sandera (4. Mrz 2007)

Hallo zusammen,

ich habe ein Regex gebastelt, um zu überprüfen, ob es sich bei einem eingegebenen String um eine gültige Dezimalzahl handelt. Gültig ist eine Dezimalzahl mit Tausendertrennzeichen und Dezimaltrennzeichen.
Nun sollen unterschiedlich viele Nachkommastellen zugelassen sein, aber irgendwie funktioniert es nicht.
Mein Regex sieht so aus:
"(([1-9]\\d{0,2})(.\\d{3})*)(,\\d{1," + fraction + "})?"

fraction gibt dabei die zugelassenen Nachkommastellen an.
Wenn ich 3, 4 oder 5, usw. übergebe funktioniert alles wunderbar. Zahlen mit entsprechen 3, 4 oder 5 usw. werden akzeptiert und Zahlen mit mehr Nachkommastellen werden abgewiesen.
Wenn ich aber 2 als Wert übergeben, dann werden trotzdem auch Zahlen mit 3 Nachkommastellen akzeptiert :shock:, aber nicht mit 4 oder mehr. Und ich versteh nicht warum  

Hoffe Ihr könnt mir helfen... hab ich irgendwas übersehen?
Bin nämlich nicht so fit was Regex angeht :roll:

Achso... und noch eine kurze Frage. Kann man irgendwie einfach ermitteln an welcher Stelle der Regexfehler aufgetreten ist? Also an wie vielter Stelle im String der erste Fehler war?

Gruß
Sandra


----------



## Eddie (4. Mrz 2007)

Der . steht für ein beliebiges Zeichen und muß daher mit \\ maskiert werden.


----------



## Sandera (4. Mrz 2007)

Mit dem Punkt hab ich ja keine Probleme, das ist ja der Tausendertrenner, sondern mit den Nachkommastellen, also den Stellen nach dem Komma.


----------



## Wildcard (4. Mrz 2007)

Davon abgesehen das Eddie recht hat und der '.' maskiert werden müsste:
http://regexlib.com/Search.aspx?k=decimal


----------



## Eddie (4. Mrz 2007)

Der Punkt kann jedes Zeichen darstellen, auch das Komma. ,123 wird dann also von (.\\d{3})* erkannt und der optionale Ausdruck (,\\d{1," + fraction + "})? wird 0-mal gefunden. ,1234 ist zu lang, um von (.\\d{3})* erkannt zu werden, daher funktionert es ab 4 Stellen richtig.


----------



## Sandera (4. Mrz 2007)

Ah. Jetzt hab ich's verstanden. Da stand ich wohl etwas auf dem Schlauch ;-)
Vielen Dank!!!

Habt Ihr den für die Ermittlung der Fehlerstelle auch eine Idee?


----------

