Probleme mit Zahlenfilter bei Texteingabe mithilfe String matches

ghyme

Mitglied
Hallo,

ich möchte gerne einen InputFilter verwenden, der die Eingabe auf folgendes Format beschränkt: 1/2/3

Die erste Zahl hat den Wertebereich 0-13, die zweite Zahl 0-7 und die letzte Zahl von 0-255.

Ich muss also meinen String mit .matches() überprüfen, versteh aber nicht wie das geht...

Hier mal als Beispiel der InputFilter für IP-Adressen, den ich im Internet gefunden hab. Ist für Android, aber die matches-Funktion ist ja von Java:

Java:
//Use a input filter for the input of the IP address
            InputFilter[] filters = new InputFilter[1];
            filters[0] = new InputFilter() {
                    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                        if (end > start) {
                            String destTxt = dest.toString();
                            String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
                            if (!resultingTxt.matches ("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { 
                                return "";
                            } else {
                                String[] splits = resultingTxt.split("\\.");
                                for (int i=0; i<splits.length; i++) {
                                    if (Integer.valueOf(splits[i]) > 255) {
                                        return "";
                                    }
                                }
                            }
                        }
                 return null;
                 }
            };                  
            et_router_ip.setFilters(filters);
 
Zuletzt bearbeitet:
Java:
String regex = REGEX;
String result = INPUT;

result.matches(regex); <------- ergibt TRUE oder FALSE

Einfach nur die Methode mathces mit dem String Objekt Aufrufen, was deine Zahlenwerte enthält und als Parameter den Regex einwerfen.
 
Hier mal als Beispiel der InputFilter für IP-Adressen, den ich im Internet gefunden hab. Ist für Android, aber die matches-Funktion ist ja von Java:
Schön, aber was hat das mit Deinem Problem zu tun ;-)
Die erste Zahl hat den Wertebereich 0-13, die zweite Zahl 0-7 und die letzte Zahl von 0-255.

Ich muss also meinen String mit .matches() überprüfen, versteh aber nicht wie das geht...
Wie schaut denn der String aus? Sind die Zahlen von einander getrennt (Leerzeichen...) ?
Man muss das ganze nicht unbedingt mit matches überprüfen, man kann evtl. auch die Zahlen aus dem String extrahieren und in Zahlen umwandeln, dann ist es ganz einfach zu prüfen, ob diese in dem jeweiligen Wertebereich liegen.
 
Schön, aber was hat das mit Deinem Problem zu tun ;-)

Ist ja eigentlich fast meine Lösung, müsste ja nur den Regex innerhalb der matches Klammern austauschen, krieg das aber nicht auf die Reihe...

Wie schaut denn der String aus? Sind die Zahlen von einander getrennt (Leerzeichen...) ?
Man muss das ganze nicht unbedingt mit matches überprüfen, man kann evtl. auch die Zahlen aus dem String extrahieren und in Zahlen umwandeln, dann ist es ganz einfach zu prüfen, ob diese in dem jeweiligen Wertebereich liegen.

Nein es schaut z.B. so aus 3/4/5 ohne Leerzeichen dazwischen. Der String besteht ja nicht sondern wird in Echtzeit bei der Eingabe des Benutzers überprüft.
 
Nein es schaut z.B. so aus 3/4/5 ohne Leerzeichen dazwischen. Der String besteht ja nicht sondern wird in Echtzeit bei der Eingabe des Benutzers überprüft.
Also exisitiert er ja zur Zeit der Prüfung?
Einfach den String mittels split an den Slashes zerlegen und die einzelnen Teile in Zahlen wandeln und diese prüfen.
Bzgl. RegEx hab ich noch nicht drübernachgedacht, aber das dürfte wenn überhaupt möglich ein etwas komplexerer Ausdruck werden.
 

Zurück
Oben