tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
891
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RalU RalU ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    26
    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:
    Code :
    1
    
    String regex = "[1-2]{1}[0-9]{1}|[3]{1}[0]{1}|[2-9]{1}"
    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?
    Geändert von RalU (12.03.10 um 13:35 Uhr)
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.098
    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ß
    Klaus
     
    Es 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 !!

  3. #3
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    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)
     

  4. #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ß Tom
     
    Java 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

  1. JavaScript RegEx für Zahlen
    Von SYS83 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 31.08.09, 10:57
  2. Nur Zahlen von 1 bis 9 als Eingabe?
    Von racedriver im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 13.12.07, 00:57
  3. Eingabe auf Zahlen prüfen
    Von counteract im Forum PHP
    Antworten: 5
    Letzter Beitrag: 24.11.07, 13:26
  4. Eingabe von Zahlen
    Von Cadeg im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 22.07.07, 12:54
  5. eingabe auf zahlen prüfen
    Von Operator_Jon im Forum PHP
    Antworten: 12
    Letzter Beitrag: 16.06.06, 15:21