Hallo,
ich bin auf der Suche nach einem perfekten Regulären Ausdruck zur Überprüfung einer Benutzereingabe in einer
JTextcomponent. Und zwar dürfen nur die Zahlen 2,3,4,...,30 (2 bis 30) eingegeben werden.
An die Textcomponente habe ich einen KeyListener angehangen, der die Benutzereingabe mit einem entsprechenden regulären Ausdruck matchen soll um Falscheingaben erst gar nicht erlaubt.
Mein bisheriger Regulärer Ausdruck sieht folgendermaßen aus:
Erklärung:
Unterteilung in 3 "Blöcke" :
1. Block: 1. Ziffer 1 oder 2 und 2. Ziffer 0 bis 9
2. Block: 1. Ziffer 3 und 2. Ziffer 0
3. Block: Einstellige Zahlen (eine Ziffer von 2 bis 9)
Er passt prinzipiell ganz gut. Problematisch sind allerdings die Fälle, in denen die erste Ziffer ein 1 ist:
z.B. Eingabe der gültigen Zahl 10 und Eingabe der gültigen Zahl 11.
Erst wenn bei diesen Fällen jede Ziffer GLEICHZEITIG eingebe (also z.B. "11" gleichzeitig auf der Tastatur), wird die Eingabe akzeptiert.
Das Problem liegt natürlich am KeyListener, der den Regulären Ausdruck für jede eingegeben Ziffer neu matcht. Dennoch möchte ich eigentlich den KeyListener benutzen, damit Falscheingaben erst gar nicht
eingegeben werden dürfen.
weiterer Hinweis: Die Textcomponente wird defaultmäßig bei Initalisierung auf den Wert "2" gesetzt, der Focus wird
auf die Stelle "0" in der Textcomponente gesetzt und die 2 wird "markiert", so dass bei der nächsten Eingabe
einfach nur der Wert direkt überschrieben werden kann (ohne <- -Taste zu bedienen).
Weiterhin wird immer die zuletzt gültige Eingabe gesetzt, wenn zuvor eine Eingabe nicht gültig war.
Auch dann wird wie oben der Fokus gesetzt und "markiert".
Gibt es eine Möglichkeit, die noch problematischen Fälle "10" und "11" zu beheben?
Oder gibt es gar einen komplett anderen RegEx zur Lösung des Problems?
ich bin auf der Suche nach einem perfekten Regulären Ausdruck zur Überprüfung einer Benutzereingabe in einer
JTextcomponent. Und zwar dürfen nur die Zahlen 2,3,4,...,30 (2 bis 30) eingegeben werden.
An die Textcomponente habe ich einen KeyListener angehangen, der die Benutzereingabe mit einem entsprechenden regulären Ausdruck matchen soll um Falscheingaben erst gar nicht erlaubt.
Mein bisheriger Regulärer Ausdruck sieht folgendermaßen aus:
Code:
String regex = "[1-2]{1}[0-9]{1}|[3]{1}[0]{1}|[2-9]{1}"
Unterteilung in 3 "Blöcke" :
1. Block: 1. Ziffer 1 oder 2 und 2. Ziffer 0 bis 9
2. Block: 1. Ziffer 3 und 2. Ziffer 0
3. Block: Einstellige Zahlen (eine Ziffer von 2 bis 9)
Er passt prinzipiell ganz gut. Problematisch sind allerdings die Fälle, in denen die erste Ziffer ein 1 ist:
z.B. Eingabe der gültigen Zahl 10 und Eingabe der gültigen Zahl 11.
Erst wenn bei diesen Fällen jede Ziffer GLEICHZEITIG eingebe (also z.B. "11" gleichzeitig auf der Tastatur), wird die Eingabe akzeptiert.
Das Problem liegt natürlich am KeyListener, der den Regulären Ausdruck für jede eingegeben Ziffer neu matcht. Dennoch möchte ich eigentlich den KeyListener benutzen, damit Falscheingaben erst gar nicht
eingegeben werden dürfen.
weiterer Hinweis: Die Textcomponente wird defaultmäßig bei Initalisierung auf den Wert "2" gesetzt, der Focus wird
auf die Stelle "0" in der Textcomponente gesetzt und die 2 wird "markiert", so dass bei der nächsten Eingabe
einfach nur der Wert direkt überschrieben werden kann (ohne <- -Taste zu bedienen).
Weiterhin wird immer die zuletzt gültige Eingabe gesetzt, wenn zuvor eine Eingabe nicht gültig war.
Auch dann wird wie oben der Fokus gesetzt und "markiert".
Gibt es eine Möglichkeit, die noch problematischen Fälle "10" und "11" zu beheben?
Oder gibt es gar einen komplett anderen RegEx zur Lösung des Problems?
Zuletzt bearbeitet: