Konkrete Regex Frage

henpara

Bekanntes Mitglied
Ich möchte in einem Textfeld als Input Zahlen mit Komma getrennt zulassen. Die Zahlen dürfen 1-3 - stellig sein und am Ende darf kein Komma stehen.

Meine erste Überlegung zu dem Pattern ergab folgendes:
Java:
String.matches("([\\d]{1,3},)*")

Wobei das noch nicht das richtige Ergebnis sein kann.

Was mir aufgefallen ist:
Immer steht beschrieben, was * Bedeutet, was [] Bedeutet, aber nirgendwo, ob und wie man zB Klammern setzen kann um das * nicht nur für das Letzte Zeichen zu setzen.

Ich will ja quasi (Ziffern{1,3},)* , wobei ich nirgendwo die Bedeutung von () in der Regex gesehen habe, kann also auch sein, daß er nun auf ( Ziffern, und beliebig viele ) wartet.

Außerdem stehe ich vor dem Problem, daß ich quasi eine Pattern habe, die aber nicht für die letzte Sequenz gilt. Wie kann ich also noch einführen, daß der String nicht mit , enden soll? oder muss ich dafür "einfach" vorher mit String.endsWith() usw. arbeiten und den String für das Pattern vorbearbeiten??

LG
henpara
 
Ich möchte in einem Textfeld als Input Zahlen mit Komma getrennt zulassen. Die Zahlen dürfen 1-3 - stellig sein und am Ende darf kein Komma stehen.
Müsste sowas sein wie:
Code:
[[\\d]{1,3},]*[[\\d]{1,3}
 
Zuletzt bearbeitet von einem Moderator:
Schreib mir mal bitte kurz ein paar Zahlen auf die zulässig sind, wenn sie nur dreistellig sein dürfen ist dann das komma auch eine stelle oder betrifft dies nur die Stellen vor dem Komma?

ist 123,123 zuläsig
oder nur 12,3

wieviele stellen dürfen nach dem Komma kommen?
 
Das Komma ist hier als Zahlentrenner, nicht als Dezimaltrenner

Daher zulässig zB
154,999,1,2,12,43,984,23,54,1,4,2,4
unzulässig eben
1111,123,2,1,1,
oder
1,,321,124
usw.

Also es sollen quasi "Zahlen<1000 mit Komma getrennt" erlaubt sein.

aber mir scheint auch, daß das hier
(\\d{1,3},)*\\d{1,3}
tut, was ich möchte.
Hab zumindest bis jetzt noch kein Gegenbeispiel gefunden.
 
Also es sollen quasi "Zahlen<1000 mit Komma getrennt" erlaubt sein.

aber mir scheint auch, daß das hier
(\\d{1,3},)*\\d{1,3}
tut, was ich möchte.
Hab zumindest bis jetzt noch kein Gegenbeispiel gefunden.

Zu beachten ist dabei, dass eine leere Eingabe nicht erlaubt ist. Das kann durchaus erwünscht sein, kommt auf deinen Anwendungsfall an. Falls man das zulassen möchte, ginge es etwa so (ungetestet):

[c]((\\d{1,3},)*\\d{1,3})?[/c]

Falls daran irgendwas zeitkritisch ist, sollte man [c](?: ... )[/c] statt [c]( ... )[/c] verwenden.
 
Hi Crian,
danke noch für den Hinweis, war mir mehr bewußt, ohne daß ich mir wirklich tiefere Gedanken gemacht habe, weil leere Eingabe kommt nicht vor in meinem speziellen Anwendungsfall.

mfg
 

Neue Themen


Zurück
Oben