Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen

MasterShredder

Aktives Mitglied
Hallo,

ich hatte schon einen thread erstellt, doch da kam kein Ergebnis bei raus.
Ich will in meinem Eingabe TF nur Zahlen und einen Punkt zulassen.
Hier ist meine DoubleFilter Klasse:
Java:
package Subclasses;

import javax.swing.text.*;

public class DoubleFilter extends DocumentFilter{
    @Override
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr)
                            throws BadLocationException {
        if (isNumPoint(text)) {
           super.insertString(fb, offset, text, attr);
        }
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr)
                        throws BadLocationException {
        if (isNumPoint(text)) {
           super.replace(fb, offset, length, text, attr);
        }
    }

    private boolean isNumPoint(String text) {
        return text != null && text.matches("^(\\d+(\\.\\d+)?)$");
    }
}
Hier mein Eingabe TextFeld:
Java:
eingabeKwh = new JTextField();
        eingabeKwh.setBackground(UIManager.getColor("Button.background"));
        eingabeKwh.setPreferredSize(new Dimension(120, 20));
        AbstractDocument doc = (AbstractDocument) eingabeKwh.getDocument();
        doc.setDocumentFilter(new DoubleFilter());
        gbl(1, 9, 1, 1);
        add(eingabeKwh, gbc);

Bisher Funktionieren "die Zahlen" aber "der Punkt" nicht(kann keinen Punkt eingeben).
 

MoxxiManagarm

Top Contributor
Das liegt daran, dass in dem Moment wo du den Punkt eingibst der Regex nicht mehr gültig ist, da du mindestens eine Ziffer hinter dem Punkt erwartest.
 
K

kneitzel

Gast
Das Problem geht etwas weiter: text ist ja der Text, der eingefügt wird. Das bedeutet, dass es z.B. nur der "." sein könnte.

Daher ist Dir doch schon gesagt worden im anderen Thread: vermutlich wirst Du das Einfügen machen müssen um dann das Ergebnis zu prüfen, denn nur anhand des eingefügten Textes kannst Du nicht entscheiden, ob die Eingabe gültig ist.
 

MasterShredder

Aktives Mitglied
Das Thema (kommt mir) etwas knifflig vor.

Ich Schlüssel es mal etwas auf wie ich es verstanden habe:

^Beginn einer Zeile, Dann kommt Gruppe 1: (//d+ ?) dort prüfe ich auf Ziffern, + die einmal oder beliebig oft vorkommen dann kommt noch ? was mir ehrlich gesagt noch ein Rätsel ist, aber bedeutet dass es einmal oder keinmal vorkommt.
Nun folgt Gruppe 2: (//.//d+) Wo ich auf Punkt (oder einen Punkt??)prüfe, dann //d wieder auf Ziffern + die einmal oder beliebig oft vorkommen

Zuletzt $ beende ich die Zeile.

Das Problem geht etwas weiter: text ist ja der Text, der eingefügt wird. Das bedeutet, dass es z.B. nur der "." sein könnte.
Was heißt einfügen?

Wenn ich Text in TF eingebe ist das "ersetzen" Und ist einfügen dann vielleicht wenn ich per copy/paste "einfügen" würde??
 

Blender3D

Top Contributor
Bisher Funktionieren "die Zahlen" aber "der Punkt" nicht(kann keinen Punkt eingeben).
Hatte mir vor Jahren eine limitierte Eingabe gemacht für Text, Integer und Dezimal.
Java:
import java.awt.Toolkit;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

@SuppressWarnings("serial")
public class MaxSizeDocument extends PlainDocument {
    public static enum TYPE {
        TEXT, INT, FLOAT
    };

    private int maxSize;
    private TYPE type = TYPE.TEXT;

    public MaxSizeDocument(int maxSize) {
        this.maxSize = maxSize;
    }

    @Override
    public void insertString(final int offset, String text, final AttributeSet attributeSet)
            throws BadLocationException {
        if (type == TYPE.INT || type == TYPE.FLOAT) {
            String format = ".*[^0-9";
            String point = "";
            if (type == TYPE.FLOAT) {
                Content content = getContent();
                String txt = content.getString(0, content.length());
                point = txt.contains(".") ? "" : ".";
            }
            format += point + "]";
            text = text.replaceAll(format, ""); // remove all non digits
        }
        if (isNewLengthOk(text))
            super.insertString(offset, text, attributeSet);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    protected boolean isNewLengthOk(final String text) {
        if (getLength() + text.length() <= maxSize)
            return true;
        return false;
    }

    public void setType(TYPE type) {
        this.type = type;
    }
}
 

MasterShredder

Aktives Mitglied
Hatte mir vor Jahren eine limitierte Eingabe gemacht für Text, Integer und Dezimal.
Sorry, da hab ich momentan kein Überblick. Würde es auch jetzt gerne über diese weiße machen.

Das liegt daran, dass in dem Moment wo du den Punkt eingibst der Regex nicht mehr gültig ist, da du mindestens eine Ziffer hinter dem Punkt erwartest.

Der Jenige der mir diesen Tipp gegeben hat meinte es wäre richtig so.
Kommazahlen sind als Regex etwas komplizierter als nur Integer. Du brauchst mindestens eine Ziffer, dann optional ein Punkt und mindestens eine weitere Ziffer, und das als ganzes Optional, wenn leere Eingaben gültig sein sollen.
Das ganze ergibt dann etwa sowas: ^(\\d+(\\.\\d+)?)$

Nur wo erwarte ich denn jetzt die zweite Ziffer, in Gruppe 2?
Und wie wird das ganze bearbeitet. Fängt es in der inneren Klammer an, also erst //.dann //d+ und geht dann in die äußere Klammer, so wie man Klammern auflösen würde?

Und wie kann ich es lösen?
Habe mal versucht in Gruppe2 die Ziffern noch einzuklammern, meine Theorie dass dann keine Ziffer nach dem Punkt erwartet wird.
Funktionierte leider nicht.

Du das Einfügen machen müssen um dann das Ergebnis zu prüfen, denn nur anhand des eingefügten Textes kannst Du nicht entscheiden, ob die Eingabe gültig ist.
Wie mache ich das?
Wie funktioniert dass mit dem Einfügen genau?
 

Blender3D

Top Contributor
Sorry, da hab ich momentan kein Überblick. Würde es auch jetzt gerne über diese weiße machen.
Ist nicht schwierig. Einfach benutzen.
Java:
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class TestFloatTextField extends JPanel {
    public TestFloatTextField() {
        setPreferredSize(new Dimension(300, 300));
        JTextField text = new JTextField();
        text.setPreferredSize(new Dimension(100, 30));
        MaxSizeDocument doc = new MaxSizeDocument(10);
        doc.setType(MaxSizeDocument.TYPE.FLOAT);
        text.setDocument(doc);
        text.setHorizontalAlignment(JTextField.RIGHT);
        add(text);
    }
}
Java:
public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TestFloatTextField());
        frame.pack();
        frame.setVisible(true);
    }
}
;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
J Regex + Match Zahlen filtern Java Basics - Anfänger-Themen 5
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
I Rechenoperatoren mit Regex splitten Java Basics - Anfänger-Themen 12
F Methoden replaceAll (regex) HTML Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben