Was ist Eingabevalidierung?
Eingabevalidierung heißt, jede Eingabe zu prüfen, bevor das Programm ihr traut. Das ist wichtig, weil ein Programm mit ungeprüften Eingaben tut, was ein Fremder ihm vorgibt.
Ein Bestellformular erwartet eine Menge von 1 bis 20. Jemand tippt 99999, ein Wort oder gar nichts. Ohne Prüfung bucht das Programm vielleicht den Lagerbestand ins Minus.
Am Ende dieser Lektion
Notiz
Ich kann eine Eingabe mit einer Liste erlaubter Werte, einer Länge und einem Typ prüfen, bevor das Programm ihr traut.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Validierung | die Prüfung, ob eine Eingabe die Regeln erfüllt |
| Erlaubnisliste | eine Liste der Werte, die gelten; alles andere wird abgelehnt; auf Englisch Allow List |
| Typ | die Art eines Werts, etwa Text oder ganze Zahl |
| Länge | die Anzahl der Zeichen einer Eingabe |
| Sperrliste | eine Liste verbotener Werte; sie vergisst immer etwas; auf Englisch Deny List |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Erlaubnisliste ist besser als eine Sperrliste
Es gibt zwei Wege. Eine Sperrliste nennt, was verboten ist. Eine Erlaubnisliste nennt, was gilt, und lehnt den Rest ab.
Die Sperrliste vergisst immer einen Fall. Die Erlaubnisliste ist kurz und vollständig, wenn die Menge der guten Werte klein ist, etwa fünf Artikel oder eine Sortierung.
Ein Artikel muss auf der Liste stehen
ARTIKEL = ["Notizbuch", "Stift", "Tasse", "Schürze", "Lampe"]
def artikel_ok(name):
return name in ARTIKEL
# Ändern Sie den Namen in "Stift", dann in "Stift; weg".
name = "Tasse"
print(name, "->", artikel_ok(name))
Typ und Länge begrenzen, was ankommt
Nicht jeder Wert passt auf eine Liste. Eine Menge ist eine Zahl, ein Gutscheincode ein Text fester Länge. Hier prüfen Sie den Typ und die Länge.
Die Prüfung läuft in einer festen Reihenfolge: erst die Länge, dann der Typ, dann der Bereich. Ein Text, der nicht nur aus Ziffern besteht, darf nie in eine Zahl umgewandelt werden.
Beispiel: Regeln für ein Bestellformular
| Feld | Regel | Gut | Abgelehnt |
|---|---|---|---|
| Artikel | steht auf der Liste | Stift | Stiftx |
| Menge | nur Ziffern, 1 bis 20 | 12 | 0, 99, zwölf |
| Gutschein | 8 Zeichen, nur A bis Z und 0 bis 9 | SOMMER24 | sommer, SOMMER-24 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Menge prüfen, bevor umgewandelt wird
def menge_ok(text):
if len(text) == 0 or len(text) > 2:
return False
if not text.isdigit():
return False
zahl = int(text)
return zahl >= 1 and zahl <= 20
# Probieren Sie "12", "0", "99" und "zwölf".
eingabe = "12"
print(eingabe, "->", menge_ok(eingabe))
Was der Shop des Labs nicht prüft
Der Shop des Labs hat keine Prüfung für sein Suchwort. Die zwei Runs sehen nur hin. Der erste sucht ein echtes Wort. Der zweite schickt ein leeres Suchwort und zählt die Zeilen der Antwort.
Ein leeres Wort liefert alle fünf öffentlichen Artikel: Der Shop fragt nicht, ob ein Wort sinnvoll ist.
Eine gewöhnliche Suche
curl -s -G --data-urlencode "q=notebook" http://app:8000/searchHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein leeres Suchwort
curl -s -G --data-urlencode "q=" http://app:8000/search | wc -lHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, die Prüfung im Browser genüge, etwa ein Feld, das nur Ziffern annimmt. Das stimmt nicht. Wer die Seite umgeht, sendet jeden Wert selbst. Prüfen Sie immer noch einmal im Programm, das die Daten verarbeitet. Die Prüfung im Browser ist nur Bequemlichkeit.