ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
891
891
EMPFEHLEN
-
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:Code :1
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?Geändert von RalU (12.03.10 um 13:35 Uhr)
-
12.03.10 13:38 #2
Moin,
so auf die Schnelle fällt mir leider auch keine konkrete Lösung ein
Aber vlt. hilft dies ja weiter:
Wir nutzen hier in der Firma zum Testen von regulären Ausdrücken das nette kleine Tool "RegEx coach"!
Es kann zusammen mit seiner Doku hier runtergeladen werden:
http://weitz.de/regex-coach ("Windows installer" oder "Linux tar archive")
Es eignet sich auch gut zur Einarbeitung in dieses Thema!
Eine weitere gute Übersicht zu den Java Pattern liefert diese Seite:
http://java.sun.com/javase/6/docs/ap...x/Pattern.html
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Ist zwar keine direkte Antwort auf deine Frage, aber für solche Eingabefelder präferiere ich Slider Komponenten
http://java.sun.com/docs/books/tutor...ts/slider.html
Ich finde die UI Metapher für solche Eingaben eingängiger.
Zu deinem Problem, warum kannst Du nicht bei dem zweiten Tastendruck "11" auswerten, anstatt nur die zweite "1"? Damit hättest Du das geknackt.Geändert von Sentoo (12.03.10 um 19:08 Uhr)
-
12.03.10 18:00 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
du könntest auch einfach einen InputVerifier verwenden:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
package de.tutorials.training; import java.awt.BorderLayout; import javax.swing.InputVerifier; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.text.JTextComponent; public class InputVerifierExample extends JFrame { public InputVerifierExample() { super("InputVerifierExample"); setDefaultCloseOperation(EXIT_ON_CLOSE); final JTextComponent inputField = new JTextField(3); inputField.setInputVerifier(new InputVerifier() { @Override public boolean verify(JComponent input) { int number = 0; try { number = Integer.parseInt(inputField.getText()); } catch (NumberFormatException e) { // ignore } return number >= 2 && number <= 30; } }); add(inputField); add(new JButton("xxx"),BorderLayout.SOUTH); setLocationRelativeTo(null); pack(); setVisible(true); } public static void main(String[] args) { new InputVerifierExample(); } }
Ansonsten bietet sich JGoodies Validation an:
http://www.jgoodies.com/freeware/val...emo/index.html
https://validation.dev.java.net/
http://www.google.de/url?sa=t&source...H_O0uWnlzrAk-w
Oder einfach Simple Validation:
http://kenai.com/projects/simplevalidation
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
JavaScript RegEx für Zahlen
Von SYS83 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 31.08.09, 10:57 -
Nur Zahlen von 1 bis 9 als Eingabe?
Von racedriver im Forum C/C++Antworten: 5Letzter Beitrag: 13.12.07, 00:57 -
Eingabe auf Zahlen prüfen
Von counteract im Forum PHPAntworten: 5Letzter Beitrag: 24.11.07, 13:26 -
Eingabe von Zahlen
Von Cadeg im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 22.07.07, 12:54 -
eingabe auf zahlen prüfen
Von Operator_Jon im Forum PHPAntworten: 12Letzter Beitrag: 16.06.06, 15:21





Zitieren

Login




