Java Regex Aufzählung kontrollieren

Honksponk

Mitglied
Hallo zusammen,

ich möchte gerne eine Benutzereingabe in Form eines Strings auf Korrektheit überprüfen. Der String soll folgende Formatierung haben: "Beispiel1, Beispiel2, Beispiel3, BeispielN"
Wobei Beispiel alle Zeichen von a-zA-Z0-9.,_!% (und Leerzeichen) annehmen und mindestens 1 jedoch maximal 20 Zeichen lang sein darf. Zusätzlich sollen mindestens 5 Beispiele im String vorhanden sein.

String.matches("([\\w.,!% ]{1,20},){5,}"); war bislang noch nicht zielführend. Über neuen Input würde ich mich sehr freuen.

Vielen Dank!
 
Der Beistrich und das Leerzeichen *innerhalb* der Werte sind ein Problem, duerfen die wirklich sein? Weil damit ist folgendes erlaubt:

Code:
Beispiel1, Beispiel2, Beispiel3, Bei,, , ,, ,spiel ,, ,,4, Beispiel5

Und das bekommst du nicht zerlegt, nicht so wie sich der Benutzer das dachte. Auszerdem hast du String-Anfang/Ende nicht in deinem Ausdruck, damit prueft es nur einen Teil davon.

In dem Fall wuerde ich eher eine zweistufige Validierung machen und Beistriche in den Werten verbieten, oder einen anderen Trenner machen.

Java:
String splittedInput = input.split(",");

if (splittedInput.length < 5) {
    throw BadInputException(String.format("Eingabe muss aus mindestens 5 Gruppen bestehen, waren aber <%s> Gruppen.",
            Integer.toString(splittedInput.length));
}

for (String inputGroup : splittedInput) {
    if (!inputGroup.trim().matches("^[\\\w.!% ]{1,20}$") {
        throw BadInputException(String.format("Eingabe Gruppe ist nicht wohlgeformt, Gruppe <%s>.",
                inputGroup);
    }
}

// Alles gut.
 
Der Beistrich und das Leerzeichen *innerhalb* der Werte sind ein Problem, duerfen die wirklich sein? Weil damit ist folgendes erlaubt:

Code:
Beispiel1, Beispiel2, Beispiel3, Bei,, , ,, ,spiel ,, ,,4, Beispiel5

Und das bekommst du nicht zerlegt, nicht so wie sich der Benutzer das dachte. Auszerdem hast du String-Anfang/Ende nicht in deinem Ausdruck, damit prueft es nur einen Teil davon.

In dem Fall wuerde ich eher eine zweistufige Validierung machen und Beistriche in den Werten verbieten, oder einen anderen Trenner machen.

Java:
String splittedInput = input.split(",");

if (splittedInput.length < 5) {
    throw BadInputException(String.format("Eingabe muss aus mindestens 5 Gruppen bestehen, waren aber <%s> Gruppen.",
            Integer.toString(splittedInput.length));
}

for (String inputGroup : splittedInput) {
    if (!inputGroup.trim().matches("^[\\\w.!% ]{1,20}$") {
        throw BadInputException(String.format("Eingabe Gruppe ist nicht wohlgeformt, Gruppe <%s>.",
                inputGroup);
    }
}

// Alles gut.
Danke! habe noch ein bisschen rumbasteln müssen, aber es hat geklappt!
 

Zurück
Oben