Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel Validierung von Anwendereingaben
  gp 7.1 RequiredFieldValidator
    gp 7.1.1 Display-Attribut
    gp 7.1.2 InitialValue-Attribut
    gp 7.1.3 Die Fehlermeldung definieren
  gp 7.2 Das ValidationSummary-Steuerelement
  gp 7.3 Wie das Display-Attribut funktioniert
  gp 7.4 CompareValidator
    gp 7.4.1 Die Eingabe mit einem fixen Wert vergleichen
    gp 7.4.2 Zwei Eingabefelder miteinander vergleichen
    gp 7.4.3 Eine Typüberprüfung vornehmen
  gp 7.5 RangeValidator
  gp 7.6 RegularExpressionValidator
    gp 7.6.1 Reguläre Ausdrücke erstellen
    gp 7.6.2 Eingaben mit regulären Ausdrücken überprüfen
    gp 7.6.3 Konventionen für gültige Passwörter überprüfen
  gp 7.7 CustomValidator
    gp 7.7.1 Serverseitige Überprüfung
    gp 7.7.2 Eine clientseitige Überprüfung ergänzen


Galileo Computing

7.6 RegularExpressionValidator  downtop

Die Überprüfung regulärer Ausdrücke galt bis vor einigen Jahren noch als Perl-Domäne. Andere Sprachen haben hier aber mittlerweile nachgezogen und auch ASP.NET bietet ein entsprechendes Validierungssteuerelement.

Mit einem RegularExpressionValidator-Steuerelement können Sie eine Eingabe daraufhin überprüfen, ob die eingegebene Zeichenfolge einem bestimmten Schema entspricht. Mit Hilfe eines regulären Ausdrucks können Sie überprüfen,

gp  ob eine Zeichenkette nur erlaubte Zeichen enthält,
gp  ob bestimmte Zeichen oder Gruppen von Zeichen in der richtigen Reihenfolge auftreten,
gp  ob Zeichen in der richtigen Anzahl auftreten.

Ein typischer Anwendungsfall wäre die Überprüfung, ob eine Eingabe eine gültige E-Mail-Adresse darstellt.


Tipp   Bevor Sie in ASP.NET einen regulären Ausdruck zur Eingabeüberprüfung verwenden, sollten Sie kurz darüber nachdenken, ob die anderen Validierungssteuerelemente die anstehende Überprüfung nicht vielleicht besser lösen können. In herkömmlichen Skriptsprachen stehen zur Überprüfung oft nur reguläre Ausdrücke zur Verfügung. In ASP.NET sollten Sie nicht den Fehler machen, mit Hilfe eines regulären Ausdrucks eine Überprüfung zu realisieren, die sich beispielsweise mit einem CompareValidator oder RangeValidator leichter lösen ließe.

Reguläre Ausdrücke bilden eine Welt für sich. Dieser Abschnitt stellt lediglich einige Grundlagen vor. Wer eine vollständige Referenz über alle Möglichkeiten der Verwendung regulärer Ausdrücke benötigt, sollte auf jeden Fall die .NET-Dokumentation zu Rate ziehen. Hier werden zahlreiche Sonderfälle erklärt, die einem bei der Arbeit mit regulären Ausdrücken das Leben schwer machen können.


Galileo Computing

7.6.1 Reguläre Ausdrücke erstellen  downtop

Ein regulärer Ausdruck ist ein String, der das Muster beschreibt, nach dem ein anderer String aufgebaut ist. An einer E-Mail-Adresse wird im Folgenden beispielhaft dargestellt, wie Sie einen regulären Ausdruck aufbauen können.

In umgangssprachlicher Formulierung lässt sich der prinzipielle Aufbau einer E-Mail-Adresse etwa so beschreiben:

gp  Am Anfang steht mindestens ein Zeichen für den Empfänger.
gp  Es folgt genau ein @-Zeichen.
gp  Es folgen mindestens zwei Zeichen für die Domain.
gp  Es folgt ein Punkt.
gp  Den Abschluss bilden mindestens zwei Zeichen.

Diese Beschreibung ist noch nicht sehr genau, soll für unsere Zwecke aber ausreichen. Sie verwendet verschiedene Typen von Charakterisierungen.

Anker

Die Wendung »Am Anfang« verankert einen String an einer bestimmten Position, nämlich ganz am Anfang. ASP.NET bietet zwei Anker.

^ markiert den Anfang des Strings.

$ markiert das Ende des Strings.

Quantifizierungen

Die Wendung »mindestens zwei Zeichen« verwendet einen quantifizierenden Ausdruck. Für solche quantifizierenden Ausdrücke bietet ASP.NET eine ganze Reihe von Operatoren. Zunächst schreibt man das Zeichen beziehungsweise die Zeichengruppe hin und fügt den quantifizierenden Ausdruck an. Dabei bedeutet:

? gar nicht oder einmal,

+ einmal oder mehrmals,

* gar nicht, einmal oder mehrmals,

{n} genau n-mal,

{n,} mindestens n-mal,

{n,m} mindestens n-mal, höchstens m-mal.

Zeichenklassen

Innerhalb von E-Mail-Adressen sind keine Sonderzeichen wie die deutschen Umlaute erlaubt. Wenn also in der umgangssprachlichen Beschreibung von »einigen Zeichen« die Rede ist, dann ist hier eine so genannte Zeichenklasse gemeint. ASP.NET bietet folgende Möglichkeiten für die Definition von Zeichenklassen.

. Entspricht allen Zeichen außer dem Zeilenumbruchzeichen \n

[aum] Entweder ein a oder ein u oder ein m. Die erlaubten Zeichen werden also in eckigen Klammern aufgelistet.

[^aum] Kein a und auch kein u und auch kein m. Nicht erlaubte Zeichen werden aufgelistet.

[0-9a-fA-F] Eine Ziffer oder ein Buchstabe von a bis f, klein- oder großgeschrieben.

Für einige häufig gebrauchte Zeichenklassen gibt es außerdem vordefinierte Kürzel:

\w für ein beliebiges Wortzeichen (d. h. keine Satzzeichen, Leerzeichen etc.),

\W für ein beliebiges Nichtwortzeichen,

\s für ein Leerraumzeichen,

\d für eine Dezimalziffer.

Die .NET-Dokumentation bietet noch detailliertere Informationen zu den Zeichenklassen.

Mit Hilfe dieser Werkzeuge lässt sich eine E-Mail-Adresse annäherungsweise in einen regulären Ausdruck fassen:

gp  Am Anfang steht mindestens ein Zeichen für den Empfänger. ^.+
gp  Es folgt genau ein @-Zeichen. ^.+@
gp  Es folgen einige Zeichen für die Domain. ^.+@.+
gp  Es folgt ein Punkt. ^.+@.+\.
gp  Den Abschluss bilden mindestens zwei Zeichen. ^.+@.+\..{2,}

Damit haben Sie einen regulären Ausdruck gebildet. Sobald in der umgangssprachlichen Beschreibung von »Zeichen« die Rede ist, verwendet dieser reguläre Ausdruck den Punkt als Zeichenklasse. Diese Zeichenklasse ist eigentlich zu umfassend, weil sie beispielsweise auch Sonderzeichen enthält. Andererseits hat das den Vorteil, dass Sie nicht versehentlich eine gültige E-Mail-Adresse als ungültig verwerfen, nur weil sie ein Zeichen enthält, das in der Zeichenklasse \w beispielsweise nicht enthalten ist, in E-Mail-Adressen aber erlaubt ist. Der Punkt, ein Bindestrich, ein Unterstrich und weitere Zeichen dürfen auch in E-Mail-Adressen vorkommen.


Achtung   Anders gesagt: Dieser reguläre Ausdruck ist noch nicht optimal, weil auch eventuell ungültige E-Mail-Adressen durchrutschen lässt. Andererseits machen Sie mit diesem regulären Ausdruck nicht den wahrscheinlich schwerer wiegenden Fehler, eine gültige E-Mail-Adresse als ungültig zu beurteilen, weil das Schema zu eng ausgelegt ist. Der bislang gefundene reguläre Ausdruck bietet auf jeden Fall noch genügend Spielraum für Optimierungen.

Aber stimmt der Ausdruck auch? Um ihn zu testen, wenden Sie ihn in einem RegularExpression-Steuerelement an.


Operator Beschreibung
\ Escape-Zeichen. Wird verwendet, um Zeichen, die in regulären Ausdrücken eine besondere Bedeutung haben, zitieren zu können
(), (?:), (?=), [] Klammern
*, +, ?, {n}, {n,}, {n,m} Quantifizierer
^, $, \Meta-Zeichen, Zeichen Anker und Sequenzen
| Alternative

Tabelle 7.5 Vorrang der Operatoren in regulären Ausdrücken. Von oben nach unten abnehmender Vorrang


Galileo Computing

7.6.2 Eingaben mit regulären Ausdrücken überprüfen  downtop

regular01.aspx erfragt vom Anwender eine E-Mail-Adresse und testet die Eingabe mit Hilfe des regulären Ausdrucks, den Sie erstellt haben. Abbildung 7.8 zeigt die Darstellung im Browser.


Attribut Wert
id Eindeutiger Bezeichner
ControlToValidate id des zu überprüfenden Steuerelements
ValidationExpression Regulärer Ausdruck
ErrorMessage Fehlermeldung für das ValidationSummary-Steuerelement
Text Fehlermeldung
Display None | Static (Default) | Dynamic
EnableClientScript true | false
ForeColor Farbangabe
BackColor Farbangabe
runat Server

Tabelle 7.6 Attribute des RegularExpressionValidator-Steuerelements

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.8 Mit einem regulären Ausdruck können Sie beispielsweise E-Mail-Adressen überprüfen.

<!-- regular01.aspx -->
<% @Page debug="true" %>
<html><head>
<title>RegularExpression-Validator</title>
</head><body>
<h3>RegularExpression-Validator</h3>
<p>Bitte geben Sie eine E-Mail-Adresse ein:</p> 
<form runat="server">
<input type="text" runat="server" id="txtEMail">
<input type="submit" value=" OK ">
<asp:RegularExpressionValidator runat="server"
     ControlToValidate="txtEMail"
     ValidationExpression="^.+@.+\..{2,}"
     Text="Bitte überprüfen Sie die E-Mail-Adresse." />
</form></body></html>

Achtung   Wer nicht nur eine ungefähre Überprüfung vornehmen, sondern ganze Arbeit leisten will, muss den Standard für die Gestaltung von E-Mail-Adressen komplett umsetzen. Das ist allerdings keine triviale Aufgabe, weil hier zahlreiche Ausnahmen möglich sind. Der momentan gültige Standard für das »Internet Message Format« ist definiert im RFC 2822, zu finden unter anderem hier: http://www.faqs.org/rfcs/rfc2822.html.


Galileo Computing

7.6.3 Konventionen für gültige Passwörter überprüfen  toptop

Im Abschnitt 7.4.2, Zwei Eingabefelder miteinander vergleichen, wurde ein Beispiel entwickelt für ein Formular, das vom Anwender die doppelte Eingabe eines Passwortes verlangt. Dieses Beispiel soll jetzt noch um die Bedingungen ergänzt werden, dass das Passwort mindestens acht Zeichen lang sein soll und nur Ziffern oder Buchstaben enthalten darf. Außerdem sollen keine Sonderzeichen und Umlaute erlaubt sein.

Den passenden regulären Ausdruck erstellen Sie, in dem Sie zunächst eine eigene Zeichenklasse mit den gültigen Zeichen erstellen und anschließend eine quantifizierende Beschreibung anhängen. Damit ergibt sich dieser Ausdruck:

[0-9a-zA-Z]{8,}

regular02.aspx enthält das komplette Formular. Das RegularExpressionValidator-Element wurde hinzugefügt und der Text der Fehlermeldung wurde ergänzt, wie es in Abbildung 7.9 zu sehen ist.

<!-- regular02.aspx -->
<% @Page debug="true" %>
<html><head>
<title>Passworteingabe</title>
</head><body>
<h3>Passworteingabe</h3>
<p>Bitte geben Sie Ihr Passwort zweimal ein. 
Das Passwort muss mindestens 8 Zeichen lang sein und 
darf nur die Buchstaben von a bis z in Groß- oder 
Kleinschreibung und Ziffern enthalten. 
Umlaute und Sonderzeichen sind nicht erlaubt.</p> 
<form runat="server">
Ihr Passwort:<br> 
<input type="password" id="pass1" runat="server"><br>
Nochmal Ihr Passwort: <br>
<input type="password" id="pass2" runat="server"><br>
<input type="submit" value="  OK  " runat="server"><br>
<br>
<asp:RequiredFieldValidator runat="server" 
     ControlToValidate="pass2" /> 
<asp:CompareValidator runat="server" 
     ControlToValidate="pass2"
     ControlToCompare="pass1"     
     Operator="Equal" />
<asp:RegularExpressionValidator runat="server"
     ControlToValidate="pass1"
     ValidationExpression="[0-9a-zA-Z]{8,}" />
<asp:ValidationSummary runat="server"
     HeaderText="Bitte geben Sie zwei identische 
                 Passwörter ein und beachten Sie die 
                 Konventionen für Länge und erlaubte 
                 Zeichen."
     ShowSummary="true" />
</form></body></html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.9 Der Einsatz vier verschiedener Validierungssteuerelemente stellt eine korrekte Eingabe sicher.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de