Form Validation ist der Prozess der Überprüfung aller Formularfelder auf Korrektheit, bevor Daten an den Server gesendet werden. Im Gegensatz zur Validierung eines einzelnen Feldes berücksichtigt Form Validation die Beziehungen zwischen Feldern: Passwortbestätigung, Abhängigkeit eines Feldes von einem anderen, bedingte Pflichtfelder. Laut Google Developers, 2026 sollte Form Validation das gesamte Formular beim Absenden überprüfen und dem Benutzer eine Zusammenfassung aller Fehler bereitstellen. Eine korrekte Formularvalidierung erhöht die Registrierungskonversion um 25-35% und reduziert die Anzahl der Eingabefehler.
Wichtige Punkte
Form Validation ist ein Prozess, der sicherstellt, dass alle vom Benutzer in ein Formular eingegebenen Daten den Geschäftsanforderungen entsprechen, bevor sie an den Server gesendet werden. Die Formularvalidierung umfasst die Überprüfung jedes Feldes einzeln sowie Querprüfungen: ob das Passwort mit der Bestätigung übereinstimmt, ob mindestens ein Kontrollkästchen ausgewählt ist, ob alle Pflichtfelder ausgefüllt sind, ob das Datum korrekt ist (z.B. Geburtsdatum nicht in der Zukunft).
Der Unterschied zur einfachen Feldvalidierung besteht darin, dass Form Validation das Formular als eine Einheit betrachtet. Sie kann das Absenden blockieren, wenn ein bedingtes Feld nicht ausgefüllt ist, oder eine Zusammenfassung der Fehler in einem Dialogfenster anzeigen. Bei komplexen Formularen (Registrierung, Bestellabschluss, Fragebögen) ist die Formularvalidierung eine separate Logikebene, die unabhängig von der Benutzeroberfläche getestet wird.
Laut UX-Forschung der NN Group schließen Benutzer ein Formular dreimal häufiger ab, wenn sie Fehler sofort nach dem Absenden sehen, anstatt nach jedem einzelnen Feld. Das beste Ergebnis ergibt sich jedoch aus einer Kombination: sofortige Validierung einfacher Felder (Länge, Format) + vollständige Prüfung beim Absenden für Querfelder und Geschäftslogik.
Die Feldvalidierung beantwortet die Frage: Ist die Eingabe in diesem bestimmten Feld korrekt? Die E-Mail hat das Format user@domain.com, das Telefon besteht aus Ziffern, das Passwort ist länger als 6 Zeichen. Die Feldvalidierung ist isoliert — sie hängt nicht von anderen Feldern ab und kann in Echtzeit durchgeführt werden. Ergebnis: ein Fehler für ein bestimmtes Feld oder kein Fehler.
Die Formularvalidierung beantwortet die Frage: Kann das Formular als Ganzes abgesendet werden? Sie berücksichtigt nicht nur jedes Feld, sondern auch deren Kombinationen: Passwort und Bestätigung müssen übereinstimmen, das Startdatum kann nicht später als das Enddatum sein, die Summe der Felder muss 100% ergeben. Die Formularvalidierung wird beim Absenden durchgeführt und gibt ein Gesamtergebnis zurück: das Formular ist gültig oder nicht.
Architektonisch wird die Feldvalidierung in der UI-Ebene (Fragment, ViewModel) platziert, während die Formularvalidierung in der Domänenebene (Use Case, Interactor) platziert wird. Dies ermöglicht die Wiederverwendung der Formularvalidierung in verschiedenen UI-Komponenten und das Testen ohne Emulator. In Clean Architecture ist die Formularvalidierung eine Geschäftsregel, keine UI-Logik.
| Kriterium | Feldvalidierung | Formularvalidierung |
|---|---|---|
| Prüfobjekt | Ein Feld | Alle Felder + deren Beziehungen |
| Ausführungszeitpunkt | Echtzeit / bei Fokusverlust | Beim Absenden des Formulars |
| Ergebnis | Fehler eines bestimmten Feldes | Gesamtstatus des Formulars + Fehlerliste |
| Architekturebene | UI-Ebene | Domänenebene |
Es gibt zwei Hauptansätze für Form Validation. Der erste ist imperativ: Der Entwickler schreibt eine Funktion, die nacheinander jedes Feld überprüft und eine Liste von Fehlern sammelt. Dieser Ansatz ist einfach zu verstehen, aber der Code wächst mit jedem neuen Feld. Für ein Formular mit 5 Feldern ist der imperative Ansatz noch bequem, für 15 Felder ist er bereits problematisch.
Der zweite Ansatz ist deklarativ: Validierungsregeln werden durch Annotationen oder Konfiguration beschrieben. Die Bibliothek selbst durchläuft alle Felder, wendet die Regeln an und gibt das Ergebnis zurück. Beispiel: die @Email-Annotation auf dem Feld emailData, @ConfirmPassword auf dem Bestätigungsfeld. Der deklarative Ansatz reduziert den Validierungscode um das 3- bis 5-fache und macht ihn lesbar.
Der dritte Ansatz ist reaktiv unter Verwendung von RxJava oder Kotlin Flow. Jedes Feld wird als Observable oder StateFlow dargestellt. Die Formularvalidierung abonniert Änderungen in allen Feldern und berechnet den Gesamtzustand bei jeder Änderung neu. Die Sendeschaltfläche wird automatisch aktiv, wenn alle Felder gültig sind. Dieser Ansatz erfordert Verständnis der reaktiven Programmierung, bietet aber das nahtloseste Benutzererlebnis.
Betrachten wir ein Registrierungsformular mit drei Feldern: E-Mail, Passwort und Passwortbestätigung. Die Formularvalidierung umfasst: Überprüfung der E-Mail über Patterns.EMAIL_ADDRESS, Überprüfung des Passworts auf eine Mindestlänge von 8 Zeichen und das Vorhandensein mindestens einer Ziffer, Überprüfung der Übereinstimmung von Passwort und Bestätigung. Erst wenn alle drei Prüfungen bestanden sind, kann das Formular abgesendet werden.
data class RegistrationForm(
val email: String,
val password: String,
val confirmPassword: String
)
fun validateRegistration(form: RegistrationForm): ValidationResult {
if (!Patterns.EMAIL_ADDRESS.matcher(form.email).matches())
return ValidationResult(false, "Invalid email address")
if (form.password.length < 8)
return ValidationResult(false, "Password too short")
if (form.password != form.confirmPassword)
return ValidationResult(false, "Passwords do not match")
return ValidationResult(true)
}
Im Beispiel nimmt validateRegistration eine Datenklasse des Formulars entgegen und gibt ein ValidationResult zurück. Wenn mindestens eine Prüfung fehlschlägt, wird false mit einer entsprechenden Nachricht zurückgegeben. Die Verwaltung der Sendeschaltfläche basiert auf dem Result: wenn isValid = true ist, ist die Schaltfläche aktiv. Zur Aktualisierung des Zustands in Echtzeit kann LiveData
Der reaktive Ansatz mit Kotlin Flow ermöglicht die automatische Neuberechnung des Formularzustands. Jedes Feld wird als MutableStateFlow
Android Saripaar ist die beliebteste Validierungsbibliothek für Android. Sie ermöglicht es, Felder und Views direkt zu annotieren: @Email, @NotEmpty, @Password(min = 8, scheme = Password.Scheme.ALPHA_NUMERIC). Die Validierung wird mit einer einzigen Zeile validator.validate() mit einem Callback ausgelöst. Saripaar setzt den Fehler automatisch über setError auf dem EditText. Die Bibliothek unterstützt auch benutzerdefinierte Annotationen für spezifische Geschäftsregeln.
RxBinding + RxJava ist ein reaktiver Ansatz ohne separate Validierungsbibliothek. Jedes Feld veröffentlicht Änderungen über RxTextView.textChanges(). Der combineLatest-Operator fasst alle Felder zusammen und berechnet den Gesamtstatus. Vorteil: vollständige Kontrolle über die Validierungspipeline, Möglichkeit zum Hinzufügen von debounce, throttle, filter. Nachteil: Kenntnisse in RxJava erforderlich.
Material Design Components bieten integrierte Unterstützung für TextInputLayout und TextInputEditText. Die Bibliothek bietet keine Validierung als solche, sondern eine Benutzeroberfläche zur Anzeige von Fehlern: setError(), setHelperText(), setCounterEnabled(). Für die Validierung selbst ist weiterhin manuelle Logik oder Saripaar erforderlich. Material Components sind für die Anzeige zuständig, nicht für die Prüfung.
Der erste Fehler ist die reine Client-Validierung. Form Validation auf dem Client ist für die Benutzererfahrung gedacht, nicht für die Sicherheit. Ein Angreifer kann eine Anfrage direkt an die API senden und dabei die Validierung umgehen. Der Server muss alle Felder erneut überprüfen. Die Client-seitige Validierung sollte nicht der einzige Schutz sein — sie ist eine zusätzliche Ebene für den Benutzerkomfort, nicht für die Datensicherheit.
Der zweite Fehler ist das Blockieren der Sendeschaltfläche ohne Nachrichten. Wenn die Schaltfläche inaktiv ist, sollte der Benutzer sehen, welche Felder korrigiert werden müssen. Eine graue Schaltfläche ohne Erklärung ist eine der häufigsten Ursachen für niedrige Formularkonversion. Zeigen Sie Feldfehler immer neben den Feldern an, auch wenn die Schaltfläche deaktiviert ist. Der Benutzer muss verstehen, was genau das Absenden verhindert.
Der dritte Fehler ist das Ignorieren von Querfeldprüfungen. Die Validierung jedes einzelnen Feldes ist unzureichend. Felder können voneinander abhängen: Passwort und Bestätigung, Startdatum und Enddatum, Land und Stadt. Form Validation muss diese Beziehungen überprüfen. Die Prüfung nur einzelner Felder erzeugt ein falsches Sicherheitsgefühl — das Formular könnte mit inkonsistenten Daten abgesendet werden.
| Fehler | Folge | Lösung |
|---|---|---|
| Nur Client-Validierung | Sicherheitslücke | Obligatorische Serverprüfung |
| Schaltfläche ohne Nachrichten | Niedrige Formularkonversion | Feldfehler anzeigen |
| Keine Querprüfungen | Inkonsistente Daten | Feldbeziehungen validieren |
| Zu häufige Prüfungen | Benutzerverärgerung | Debounce und Prüfung bei Fokusverlust |
Häufig gestellte Fragen
Die Feldvalidierung prüft einen einzelnen Wert auf Format- oder Längenanforderungen. Die Formularvalidierung prüft alle Felder zusammen, einschließlich Querprüfungen: Passwortübereinstimmung, Feldabhängigkeiten. Die Feldvalidierung wird in der UI-Ebene durchgeführt, die Formularvalidierung — in der Domänenebene als Geschäftsregel.
Verwenden Sie einen reaktiven Ansatz: fassen Sie alle Felder in einem einzigen Flow oder Observable zusammen und abonnieren Sie Änderungen. Bei jeder Änderung eines Feldes berechnen Sie den Gesamtstatus des Formulars neu. Wenn der Status gültig ist, ist die Schaltfläche aktiv. Verwenden Sie Kotlin Flow mit combine oder RxJava mit combineLatest für automatische Aktualisierungen.
Android Saripaar ist die beste Wahl für deklarative Validierung mit Annotationen. Wenn das Projekt RxJava verwendet, bietet RxBinding einen reaktiven Ansatz ohne separate Bibliothek. Für einfache Formulare ist die manuelle Validierung mit Patterns und TextUtils ohne externe Abhängigkeiten ausreichend.
Unbedingt. Die clientseitige Validierung verbessert die Benutzererfahrung, bietet aber keine Sicherheit. Der Server muss alle Daten erneut validieren, da die API direkt zugänglich ist. Verlassen Sie sich niemals ausschließlich auf die clientseitige Validierung zum Schutz vor fehlerhaften oder bösartigen Daten.
Verwenden Sie in Jetpack Compose Kotlin Flow oder StateFlow zum Speichern des Zustands jedes Feldes. Die Validierungsfunktion nimmt den Formularzustand entgegen und gibt ein ValidationResult zurück. Die Sendeschaltfläche abonniert den Gesamtstatus. Verwenden Sie zur Anzeige von Fehlern isError in OutlinedTextField oder TextField von Compose.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch