Überprüfung von Zahleneingaben
Postleitzahlen, Kreditkartennummern und IBAN
Geschrieben von Wolf am .
Verwendung von Attributen ohne Nutzung von JavaScript
HTML5 stellt Attribute für Eingabefelder bereit, die in vielen Fällen den Einsatz von JavaScript überflüssig machen.
- Mit
kann man die Größe des Eingabefeldes und mitsize="16"
die maximale Länge der Eingabe vorgeben. Damit wird nur das abgeschickt, was sichtbar ist, und nicht auch Inhalte, die durch seitliches Scrollen verborgen sind. Sie können in das Feld nicht mehr schreiben als erlaubt ist:maxlength="15"Ohne diese Parameter kann ein Feld beliebigen langen Text enthalten, von dem nur ein kleiner Teil oder auch gar nichts sichtbar ist. Klicken Sie ins Feld und scrollen Sie mit ◀ und ▶ seitlich:
- Mit
placeholder="...text..."angegebener Platzhaltertext wird im Formularfeld angezeigt, solange noch nichts eingegeben wurde.So sorgt man mit wenig Aufwand und ohne JavaScript für Klarheit und vermeidet Fehler.
- Mit
requiredwerden Pflichtfelder markiert. Hat ein so markiertes Formular-Feld keinen Inhalt, kann das Formular nicht abgeschickt werden. Stattdessen wird etwas in der ArtBitte füllen Sie dieses Feld aus
angezeigt:
Hinweis: Bei einem erfolgreichen Abschicken passiert nichts. Denn das mit action=
angegebene Ziel des Formulars liefert einen
-Status
ohne Dateninhalt. Dadurch bleibt der Browser auf dieser Seite. 204 No ContentNichts passiert
steht also für Erfolg.
- Der Browser setzt das
Bitte füllen Sie dieses Feld aus
unter das betroffene Feld und erspart Ihnen so die Suche. Klicken Sie einfach auf dasabschicken
, und der Browser zeight Ihnen die Pflichtfelder. Völlig ohne JavaScript: - Der Browser kann auch den Inhalt von Feldern überprüfen.
Dazu gibt man im Attribut
die erlaubten Inhalte in Form eines regulären Ausdrucks an.patternDer reguläre Ausdruck für eine deutsche Postleitzahl, also fünf Ziffern, lautet
. Dabei bedeutet\d{5}
Ziffer und\d{5}das vorausgehende Konstrukt 5 mal wiederholt
. Wenn das Formular-Feld mehr oder weniger als fünf Zeichen oder ungültige Zeichen enthält, lässt sich das Formular nicht abschicken. Stattdessen zeigt der Browser den HinweiseBitte halten Sie sich an das vorgebenene Format
.Mit einer Style-Regel sorgen wir dafür, dass Felder mit einem Inhalt, der nicht zum Pattern passt, mit einem roten Rand markiert werden:
input[placeholder]:invalid:not(:placeholder-shown) { border: 3px solid red; } - Der Hinweis
Bitte halten Sie sich an das vorgebenene Format
erklärt nicht, was dasvorgegebene Format
ist. Diese AngabeDeutsche Postleitzahl aus 5 Ziffern
kommt ins
-Attribut. Ein Feld mit ungültigem Inhalt wird vom Browser jetzt mittitleBitte halten Sie sich an das vorgebenene Format: Deutsche Postleitzahl aus 5 Ziffern.
kommentiert. Damit kann der Nutzer etwas anfangen.Bei der Formulierung des Hinweis sollte man beachten, dass der Inhalt des
-Attributes auch beim Mouse-over des Eingabefeldes angezeigt wird.title
Wichtig zu wissen: der Benutzer kann auch bei einem gegebenen
-Attribut
beliebigen Text eingeben, in das Postleitzahlenfeld z.B. auch Buchstaben.
Der Browser greift erst ein beim Versuch, das Formular abzuschicken.pattern=
Korrektur von Eingaben
Zur Korrektur von Eingaben brauchen wir JavaScript: Eingaben triggern Event-Handler, und die korrigieren den Inhalt des Eingabefeldes und setzen den Eingabe-Cursor (Caret) an eine passende Position:
- Postleitzahlen: maximal 5 Zeichen, alles außer Ziffern wird getilgt:
- Von 8 bis 16 Ziffern und Buchstaben
A
bisZ
, Kleinbuchstaben werden nach Großbuchstaben konvertiert: - Ein Trennstrich am Ende wird erst beim Verlassen des Feldes (
-Event) getilgt:blur
Die Prüfung vor dem Abschicken wird weiterhin vom
-Attribut
übernommen. Das ist aber nur für einfache Muster möglich; ein regulärer Ausdruck,
der die Prüfsumme einer IBAN oder einer Kreditkartennummer nachrechnet,
wäre unbrauchbar groß.pattern=
Felder mit Prüfsummen
Bei Feldern mit Prüfsumme wird eine Validierungs-Funktion aufgerufen,
die entscheidet, ob eine Eingabe zulässig ist. Leider kann man das Ergebnis dem Browser nicht
direkt mitteilen. Stattdessen wird, wenn das Formular-Feld einen unzulässigen Inhalt hat,
dass
-Attribut auf den leeren String gesetzt.
Dann passt der Inhalt nicht auf das Pattern, der Browser markiert das Feld,
und man kann das Formular nicht abschicken.pattern
Im Text des
-Attributs sollte man auf die zusätzliche Bedingung titlegültig
hinweisen, also nicht einfach Kartennummer aus 16 Ziffern
, sondern gültige
Kartennummer aus 16 Ziffern
.
- Kartennummer (Kreditkarte, Bahncard, …):
Die Eingabe besteht aus 16 Ziffern, das Skript fügt aber Leerzeichen zur Gliederung ein.
- Internationale Bankkontonummer (IBAN):
Eine IBAN besteht aus:
- Ländercode (2 Großbuchstaben),
- Prüfsumme (2 Ziffern), und
- nationale Kontoidentifikation (bis zu 30 Ziffern und Großbuchstaben).
Eine deutsche IBAN besteht aus
und exakt 20 Ziffern.DE
Zum Selbermachen
Sie können das Skript number-input.js und das Style-Sheet number-input.css herunterladen. Es gibt eine Seite mit vereinfachtem HTML number-input.htm, eine Seite mit integriertem Skript und Style number-input-standalone.htm sowie das Rundum-Sorglos-Paket number-input.zip.