Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Webbrowser
3 JavaScript einbauen
4 Programmieren mit JavaScript
5 Datum
6 Zufall
7 Browserinformationen
8 Fenster
9 Formulare
10 Frames und Iframes
11 Grafiken
12 Cookies
13 Objekte und Arrays
14 Ereignisbehandlung
15 Fehlerbehandlung
16 DOM
17 DHTML und CSS
18 AJAX
19 XML
20 Web Services
21 AJAX-Frameworks
22 Plugins
23 Multimedia
24 Java
25 Serverseitige Technologien
26 JavaScript goes .NET
27 Code schützen
28 Top Secret: Passwortschutz
29 Signierte Skripte
30 JavaScript und Sicherheit
31 Navigation
32 Warenkorb
33 JavaScript-Bibliotheken
34 Referenz
35 Quellen im Web
36 Die Zukunft von JavaScript
Index
Download: - ZIP, ca. 9,2 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / JavaScript und AJAX | vor >>
JavaScript und AJAX von Christian Wenz Das umfassende Handbuch
JavaScript und AJAX 839 S., mit DVD, 39,90 Euro Galileo Computing ISBN 3-89842-859-1 |
| Kapitel 9 Formulare
|  | 9.1 Überprüfung auf Vollständigkeit
|  |  | 9.1.1 Allgemeiner Aufbau
|  |  | 9.1.2 Texteingabefelder
|  |  | 9.1.3 Radiobuttons
|  |  | 9.1.4 Checkboxen
|  |  | 9.1.5 Auswahllisten
|  |  | 9.1.6 Fehlermeldung ausgeben
|  |  | 9.1.7 Konstruktive Vorschläge
|  | 9.2 Automatische Überprüfung
|  |  | 9.2.1 Texteingabefelder
|  |  | 9.2.2 Radiobuttons
|  |  | 9.2.3 Checkboxen
|  |  | 9.2.4 Auswahllisten
|  |  | 9.2.5 Zusammenfassung
|  | 9.3 Anwendungsmöglichkeiten für Formulare
|  |  | 9.3.1 Währungsrechner
|  |  | 9.3.2 Währungsrechner, Teil 2
|  |  | 9.3.3 Formularfelder für die Textausgabe nutzen
|  |  | 9.3.4 Navigation mit Auswahllisten
|  | 9.4 Anwendungsbeispiel: Fensteroptionen
|  | 9.5 Daten behalten
|  |  | 9.5.1 Das Eingabeformular
|  |  | 9.5.2 Die Ausgabeseite
|  | 9.6 Dynamische Auswahllisten
|  |  | 9.6.1 Ein erster Ansatz
|  |  | 9.6.2 Ein fortgeschrittener Ansatz
|  | 9.7 Überprüfungsfunktionen
|  |  | 9.7.1 Ganze Zahlenwerte
|  |  | 9.7.2 Dezimalzahlen
|  |  | 9.7.3 Telefonnummern
|  |  | 9.7.4 E-Mail-Adressen
|  |  | 9.7.5 In Zahlenwerte umwandeln
|  | 9.8 Reguläre Ausdrücke
|  |  | 9.8.1 Kurzeinführung
|  |  | 9.8.2 Ein Objekt erzeugen
|  |  | 9.8.3 Mit dem Objekt arbeiten
## 9.8 Reguläre Ausdrücke Die Programmiersprache Perl ist unter anderem deswegen so beliebt, weil die Verwendung von regulären Ausdrücken auf diese Weise hoffähig geworden ist.2 Ein regulärer Ausdruck ist – stark vereinfacht gesagt – eine Zeichenfolge, die ein Textmuster repräsentiert. Dieses Textmuster kann dann in einer längeren Zeichenkette gesucht werden. Ein umgangssprachlich formuliertes Textmuster ist etwa: »ein Wort, das mit J beginnt und zwei ›a‹s enthält«. Auf dieses Textmuster würden beispielsweise sowohl »Java« als auch »JavaScript« passen. Mit regulären Ausdrücken kann man beispielsweise Formulareingaben sehr schnell überprüfen. Einige der Funktionen aus dem vorangegangenen Abschnitt können auf diese Weise viel einfacher programmiert werden. Ein Wort zur Warnung aber gleich vorweg: Mit den Methoden des String-Objekts, beispielsweise indexOf() und substring() kann man praktisch alle Funktionalitäten nachbilden, die reguläre Ausdrücke anbieten. Dazu ist jedoch eine Menge Programmierarbeit nötig (es gibt in der Tat auch Programme, die reguläre Ausdrücke in Programmcode umwandeln). Seit längerem kann man sich die Extra-Arbeit sparen und reguläre Ausdrücke mit JavaScript verwenden. ### 9.8.1 Kurzeinführung Ein Muster kann eine einfache Zeichenfolge sein, beispielsweise "abc". Das Interessante an Mustern sind jedoch die Sonderzeichen und Ausdrücke, mit denen man Muster flexibler gestalten kann. Im Folgenden werden die wichtigsten dieser Sonderzeichen und Ausdrücke vorgestellt. #### Sonderzeichen zum Zählen Mit diesen Ausdrücken kann angegeben werden, wie oft ein gewisses Zeichen vorkommen darf oder muss. Der Ausdruck muss dabei immer direkt hinter dem Zeichen stehen.
| ?: Nullmal oder einmal. Auf das Muster "ab?c" passen also "ac" und "abc", aber nicht "abbc".
| *: Nullmal oder mehrmals. Auf das Muster "ab*c" passen also "ac", "abc" und "abbc", aber nicht "adc".
| +: Einmal oder mehrmals. Auf das Muster "ab+c" passen also "abc" und "abbc", aber nicht "ac".
| {n}: Genau n-mal. Auf das Muster "ab{1}c" passt also "abc", aber nicht "abbc". Das Muster ließe sich zu "abc" vereinfachen.
| {n,m}: Zwischen n- und m-mal. Auf das Muster "ab{2,3}c" passen also "abbc" und "abbbc", aber nicht "abc".
| {n,}: Mindestens n-mal. Das Muster "ab{1,}" ist also äquivalent zu "ab+c". Dieser Ausdruck kann auch vollständig durch einige der vorherigen Ausdrücke ersetzt werden; äquivalent zu "ab{5,}c" ist beispielsweise "ab{4}b+c".
| {,m}: Höchstens n-mal. Das Muster "ab{1,}" ist also äquivalent zu "ab+c". Dieser Ausdruck kann auch vollständig durch einige der vorherigen Ausdrücke ersetzt werden; äquivalent zu "ab{5,}c" ist beispielsweise "ab{4}b+c".
Die Sonderzeichen zum Zählen müssen sich nicht nur auf ein einzelnes Zeichen beziehen. Wenn man mehrere Zeichen mit runden Klammern umgibt, werden diese als Gruppe behandelt (die Klammern sind hierbei Sonderzeichen, das Muster sucht also nicht nach den Zeichen "(" und ")"). Auf das Muster "(abc)+" passen also unter anderem "abc", "abcabc" und "abcabcabc". #### Metazeichen Innerhalb eines regulären Ausdrucks versteht man unter einem Metazeichen ein normales Zeichen, das durch einen vorangestellten Backslash (\) eine besondere Bedeutung erhält. JavaScript unterstützt die folgenden Metazeichen:
| \b: Wortgrenze. An der Stelle, an der dieses Metazeichen steht, muss ein Wort beginnen oder aufhören, damit das Muster passt. Auf das Muster "\babc" passt beispielsweise "abcde", aber nicht "ababc". Auf "\babc\b" passt nur "abc"; das erste \b steht für den Wortanfang, das zweite für das Wortende.
| \B: Keine Wortgrenze, das Gegenteil von \b. Auf das Muster "\Babc" passt beispielsweise "ababc", aber nicht "abcde". Auf das Muster "\Babc\B" passt weder "ababc" (Wortende) noch "abcde" (Wortanfang), aber "babcb".
| \d: Ziffer. Auf das Muster "\d\d\d\d" passt beispielsweise "0815", aber nicht "R2D2".
| \D: Keine Ziffer. Auf das Muster "\D\D" passt weder "12" noch "A1" noch "1A", aber "AB".
| \s: Leerzeichen. Auf das Muster "Java\sScript" passt "Java Script", aber nicht "Java-Script".
| \S: Kein Leerzeichen. Auf das Muster "Java\SScript" passen "Java_Script" und "Java-Script", aber nicht "Java Script".
| \w: Buchstabe, Ziffer oder Unterstrich (_). Auf das Muster "\w" passen also beispielsweise "A", "a", "1" und "_", aber nicht "!".
| \W: Kein Buchstabe oder Ziffer oder Unterstrich. Auf das Muster "\W" passt beispielsweise "!", aber nicht "A", "a" oder "_".
#### Weitere Ausdrücke
| .: Jedes beliebige Zeichen außer einem Zeilensprung. Auf das Muster ".." passt also jede beliebige Folge zweier Zeichen.
| [...]: Eine Auswahlliste von Zeichen. Aus der Liste von Zeichen kann genau eines ausgewählt werden. Die Zeichen stehen dabei hintereinander. Es können auch Abkürzungen vorgenommen werden. Beispielsweise bezeichnet "[A-Z]" alle Großbuchstaben und "[0 – 9]" alle Ziffern. Auf das Muster "[LJ]ava" passen also beispielsweise "Lava" und "Java", aber nicht "Cava". Das Metazeichen "\w" kann durch folgendes Muster ausgedrückt werden: "[a-zA-Z0 – 9_]" (alle Klein- und Großbuchstaben, Ziffern und der Unterstrich).
| [^...]: Negierte Auswahlliste. Das Muster "[^a-zA-Z0 – 9_]" ist also äquivalent zum Metazeichen "\W".
| ^: Zeilenanfang. Auf das Muster "^Java" passen beispielsweise "Java" und "JavaScript", aber nicht "I love Java".
| $: Zeilenende. Auf das Muster "Java$" passen beispielsweise "I love Java" und "I hate Java" und "Java", aber nicht "JavaScript".
| \: Entwertung eines Sonderzeichens. Das Dollar-Symbol "$" hat in regulären Ausdrücken eine besondere Bedeutung. Will man aber nach dem Währungssymbol suchen, so muss man "$" mit einem vorangestellten Sonderzeichen entwerten. Also passen auf das Muster "\d\d\d \$" beispielsweise "100 $" und "200 $" (und jeder andere dreistellige Dollarbetrag). Natürlich kann ein Backslash auch sich selbst entwerten; auf das Muster "\\" passt "\".
| |: Oder-Operation. Auf das Muster "abc|def" passen unter anderem "abc" und "def".
### 9.8.2 Ein Objekt erzeugen Ein regulärer Ausdruck kann mit JavaScript auf zwei Arten erstellt werden:
1. | var re = new RegExp("ab+c", "gi"); Der erste Parameter ist der reguläre Ausdruck, was unschwer zu erkennen ist. Der zweite Parameter ist optional, kann aber – wenn er angegeben wird – einen der Werte "", "g", "i" oder "gi" haben (als regulärer Ausdruck geschrieben: "g?i?"). Hierbei steht "g" für global, und das ist beim Ersetzen wichtig. So kann ein Muster auch mehrmals in einer Zeichenkette gesucht (und gefunden) werden. Für »case insensitive«, also unabhängig von Groß- und Kleinschreibung, steht "i". Somit ist new RegExp("[a-zA-Z]") äquivalent zu new RegExp("[a-z]", "i").
2. | var re = /ab+c/gi; Die Bedeutung des "gi" am Ende des Ausdrucks ist die gleiche wie im ersten Punkt. Der Unterschied ist hier, dass der reguläre Ausdruck von Schrägstrichen begrenzt wird. Das sieht im Vergleich zur restlichen JavaScript-Syntax etwas merkwürdig aus, weshalb ich persönlich die erste Variante bevorzuge. In diesem Buch wird jedoch die zweite Variante bevorzugt, weil die erste den Nachteil hat, dass z. B. der Backslash innerhalb eines Strings entwertet werden muss, also etwa "\\d". Das macht den Code für den Einsteiger nicht gerade lesbarer. Bei der zweiten Variante ist außerdem zu beachten, dass der Schrägstrich dann ja eine besondere Bedeutung hat und innerhalb des Musters mit einem Backslash entwertet werden muss, damit der JavaScript-Interpreter das Ende des Musters findet. Das Muster "\d\d/\d\d" passt beispielsweise auf "08/15", und new RegExp("\\d\\d/\\d\\d") ist auch korrekt, aber mit der zweiten Schreibweise muss es /\d\d\/\d\d/ heißen.
### 9.8.3 Mit dem Objekt arbeiten Auf eine der beiden vorgestellten Arten können Sie ein RegExp-Objekt erzeugen. Dieses Objekt stellt mehrere Methoden zur Verfügung, die Ihnen bei der Anwendung von regulären Ausdrücken von Nutzen sein werden. #### Einen Treffer suchen Man spricht im Englischen von match, einem Treffer, wenn das Muster in der zu durchsuchenden Zeichenkette vorhanden ist. Die dazugehörige Methode lautet test("Zeichenkette"). Das folgende Codestück überprüft, ob es sich bei der Zeichenkette um eine deutsche Postleitzahl handeln könnte:
    var re = /\d{5}/;
    var plz1 = re.test("01234");   //gibt true zurück
    var plz2 = re.test("8000");    //gibt false zurück
    var plz2 = re.test("D8000");   //gibt false zurück
Mit dem folgenden Code wird überprüft, ob es sich bei dem Eingabewert um eine ganze Zahl handelt. Dieser Test wurde weiter oben schon etwas mühsam entwickelt; hier handelt es sich um deutlich weniger Schreibarbeit:
    var re = /0|-?[1–9]\d*/;
    var zahl1 = re.test("12345");  //gibt true zurück
    var zahl2 = re.test("01234");  //gibt false zurück
Zur Erklärung: Eine ganze Zahl ist entweder die Null oder eine Ziffernfolge, die nicht mit der Null beginnt (also eine Ziffer von 1 bis 9). Hinter der führenden Ziffer stehen beliebig viele weitere Ziffern oder aber auch keine Ziffer mehr. Die Ziffernfolge kann durch ein optionales Minus-Zeichen eingeleitet werden. #### Treffer zurückliefern In der Praxis kommt es oft nicht nur darauf an, einen Treffer zu finden, sondern auch darauf, den auf das Muster passenden Teil der Zeichenkette zu erhalten, und teilweise auch darauf, Teile davon zu erhalten. Oben wurde bereits erwähnt, dass man mit runden Klammern einzelne Zeichen im Muster gruppieren kann. Das ist nicht nur für Nummerierungen von Bedeutung, sondern auch für das Ergebnis, da man den Wert der einzelnen Klammern gezielt abfragen kann. Dies soll an einem Beispiel verdeutlicht werden. In einem Firmen-Intranet wird die Stundenerfassung elektronisch erledigt. Um Eingabefehler abzufangen, soll JavaScript verwendet werden. Eine Stundenangabe soll im Format »0:30« bzw. »12:45« erfolgen. Der folgende reguläre Ausdruck prüft auf dieses Format. Beachten Sie, dass dabei die ersten runden Klammern um die Stundenzahl stehen und die zweiten runden Klammern um die Minutenzahl.
    var dauer = /(1?\d):([0–5]\d)/g;
Der gewerkschaftlich organisierte Leser wird gewiss verzeihen, dass Arbeitszeiten bis zu 19 Stunden und 59 Minuten zugelassen werden; der Leser mit Personalverantwortung möge übersehen, dass keine Arbeitszeiten über 20 Stunden erlaubt sind. In diesem Beispiel wird die Methode exec("Zeichenkette") des RegExp-Objekts verwendet. Im Gegensatz zu test("Zeichenkette") wird hier nicht einfach ein boolescher Wert zurückgegeben, sondern ein spezielles Objekt, das den Teil der Zeichenkette enthält, auf den das Muster passt. Außerdem werden auch die Teile innerhalb der runden Klammern abgespeichert. Folgender Code wird das verdeutlichen:
    var dauer = /(1?\d):([0–5]\d)/;
    var test = dauer.exec("abc2:45def");
    document.write("Uhrzeit: " + test[0] + "<br />");  //2:45
    document.write("Stunden: " + test[1] + "<br />");  //2
    document.write("Minuten: " + test[2] + "<br />");  //45
Das Objekt, das exec() zurückgibt, ist so etwas wie ein Array. Im Element mit dem Index 0 steht der Teil der Zeichenkette, auf den das Muster passt. Im Element mit dem Index 1 steht der Teil, der im Muster durch die ersten Klammern umgeben ist. #### Mehrere Treffer Oft ist es nicht nur von Bedeutung herauszufinden, ob in einer Zeichenkette ein Muster vorkommt und wie dieses eine Vorkommen aussieht, sondern auch, wie oft es vorkommt und wie diese Vorkommen denn aussehen. Für diese Zwecke ist die Methode match() des String-Objekts geeignet. Als Parameter kann dazu ein regulärer Ausdruck übergeben werden. Die Methode match() gibt alle Treffer in einem Array zurück. Sobald man dieses Array hat, kann man auf die herkömmliche Art und Weise die Ergebnisse auslesen. An folgendem Beispiel soll dies gleich einmal verdeutlicht werden. Innerhalb einer Zeichenkette sollen alle Wörter herausgesucht werden, die den Buchstaben "e" nur einmal enthalten. Der zugehörige reguläre Ausdruck lautet "\b[a-df-zA-DF-Z]*e[a-df-zA-DF-Z]*\b". Er sieht kompliziert aus, bedeutet aber einfach, dass es sich um ein Wort handelt (angezeigt durch die Wortgrenzen am Anfang und am Ende), das ein e enthält und ansonsten aus weiteren Buchstaben ungleich e (also von a bis d und von f bis z) besteht. Des Weiteren muss die Option "g" für globales Suchen angegeben werden, damit auch alle Vorkommen gefunden werden.
    var nur_ein_e = /\b[a-df-zA-DF-Z]*e[a-df-zA-DF-Z]*\b/g;
    var satz = "Die Geister, die ich rief, ward ich nicht mehr los";
    var liste = satz.match(nur_ein_e);
    if (liste) {
       document.write(liste.length + " Treffer
          gefunden!<br />");
       for (var i=0; i<liste.length; i++) {
          document.write(liste[i] + "<br />");
       }
    } else {
       document.write("Keine Treffer!");
    }
Hier klicken, um das Bild zu Vergrößern Abbildung 9.10 Alle Wörter, die nur ein »e« enthalten #### Suchen und ersetzen Die letzte Anwendung für reguläre Ausdrücke, die hier vorgestellt werden soll, wird mit am häufigsten verwendet – wurde aber lange Zeit nur vom Netscape Navigator unterstützt. Man kann nicht nur nach Mustern suchen, sondern diese Muster auch durch andere Muster ersetzen. Ein Beispiel war die Umformung einer »deutschen« Dezimalzahl in die amerikanische Schreibweise. Dazu mussten alle Kommata durch Dezimalpunkte ersetzt werden. Der folgende Code erledigt das sehr einfach:
    var komma = /,/g;
    var dezimalzahl_brd = "3,1415965";
    var dezimalzahl_usa = dezimalzahl_brd.replace(komma, ".");
    document.write(dezimalzahl_usa);  //3.1415965
Auch hier gibt es fortgeschrittenere Anwendungen. Ein weiterer Unterschied in der Schreibweise zwischen Deutschland und den USA besteht beim Datum. Während das Format hierzulande meistens tt.mm.jj bzw. tt.mm.jjjj ist (t = Tag, m = Monat, j = Jahr), so verwendet man in den Vereinigten Staaten in der Regel jj-mm-tt bzw. jjjj-mm-tt. Die Aufgabe besteht jetzt darin, deutsche Datumsangaben durch das amerikanische Pendant zu ersetzen. Beginnen wir mit dem regulären Ausdruck für einen Datumswert. Das Jahr ist zwei- oder vierstellig, Monat und Tag sind aber unter Umständen einstellig. Außerdem dürfen als Werte für den Tag nur Werte von 1 bis 31, beim Monat nur Werte von 1 bis 12 verwendet werden (unmögliche Daten wie etwa der 30. Februar werden hier übergangen, um das Beispiel einfach zu halten). Der Ausdruck sieht also recht kompliziert aus, aber die Idee, die dahinter steht, ist recht einfach. Probieren Sie es doch einmal mit indexOf()!
    var datum = /\b(0?[1–9]|[12][0–9]|3[01])\.(0?[1–9]|1[0–2])
    \.(\d?\d?\d\d)\b/;
Wie Sie sehen, wurden um Tag, Monat und Jahr runde Klammern eingefügt. Der Sinn des Ganzen zeigt sich bei der Übersetzung in das amerikanische Format. Die Jahreszahl muss nach vorn, der Tag nach hinten. Während beim Ergebnis der Methode exec() die Inhalte der Klammern in ergebnisarray[1], ergebnisarray[2] und so weiter stehen, findet man die Inhalte der Klammern bei regulären Ausdrücken in den speziellen Variablen $1, $2 und so weiter. Mit folgendem Code wandelt man ein deutsches Datum in das amerikanische Format um:
    function deutsch_zu_usa(d) {
       var datum = /\b(0?[1–9]|[12][0–9]|3[01])\.(0?
       [1–9]|1[0–2])\.(\d?\d?\d\d)\b/;
       if (datum.test(d)) {
          return d.replace(datum, "$3-$2-$1");
       } else {
          return d;
       }
    }
    document.write(deutsch_zu_usa("Das dritte Jahrtausend begann am 1.1.01 – und keinen Tag früher"));
Mit d.replace(datum, "$3-$2-$1") wird der reguläre Ausdruck auf die Eingabe angewandt. In der dritten Klammer, also in $3, steht die Jahreszahl, in $2 der Monat und in $1 der Tag. Die Ausgabe lautet dann: "Das dritte Jahrtausend begann am 01 – 1 – 1 – und keinen Tag früher". In der Variablen $0 steht übrigens analog zu exec() der gesamte Treffer, in diesem Fall also "1.1.2001". Die Funktion replace() gibt es auch in einer Luxusvariante. Wie beim Netscape-Pendant auch werden an replace() zwei Parameter übergeben. Der erste ist ein regulärer Ausdruck, und der zweite ist eine Funktion, die vom JavaScript-Interpreter automatisch beim Aufruf von replace() aufgerufen wird. An diese Funktion werden (vom JavaScript-Interpreter!) die folgenden Parameter übergeben (in der angegebenen Reihenfolge):
| die Zeichenkette, die auf das Muster passt
| der Reihe nach alle Untermuster: Wenn im regulären Ausdruck Klammern verwendet worden sind, werden die Entsprechungen in diesen Klammern (also die Werte von $1, $2 usw.) an die Funktion übergeben.
| die Position, an der das Muster in der zu überprüfenden Zeichenkette gefunden wurde
| die überprüfte Zeichenkette
Die Funktion, die von replace() aufgerufen wird, muss nun nur noch Folgendes leisten: einen Wert zurückliefern. Durch diesen Wert wird das gefundene Muster in der zu überprüfenden Zeichenkette ersetzt. Das Beispiel von oben – die Umformung des Datums in ein amerikanisches Format – kann folgendermaßen angepasst werden:
    function deutsch_zu_usa(d) {
       var datum = /\b(0?[1–9]|[12][0–9]|3[01])\.(0?
       [1–9]|1[0–2])\.(\d?\d?\d\d)\b/;
       if (datum.test(d)) {
          return d.replace(datum, d_zu_usa);
       } else {
          return d;
       }
    }
    function d_zu_usa(str, m1, m2, m3, pos, quelle) {
       return m3 + "-" + m2 + "-" + m1;
       //entspricht $3-$2-$1
    }
    document.write(deutsch_zu_usa("Das dritte Jahrtausend begann am 1.1.01 – und keinen Tag früher"));
Microsoft hat die replace()-Funktion erst in Version 5.5 des Internet Explorers eingebaut. Mit früheren Versionen, inklusive Version 5, funktioniert das noch nicht – zum Glück sind mittlerweile beide alten Versionen so gut wie ausgestorben. #### Neues in JavaScript 1.5 Ab JavaScript 1.5, das zurzeit nur von den aktuellen Mozilla-Derivaten unterstützt wird, erhält der Fragezeichenoperator ? eine weitere Bedeutung. Normalerweise arbeitet die Mustererkennung bei einem regulären Ausdruck »gierig«; das heißt, es wird ein möglichst großer Treffer zurückgeliefert. Hier ein Beispiel:
    var htmltag = /(<.*>)/;
    var test = htmltag.exec("<p>JavaScript</p>");
    test[0] = test[0].replace("<", "&lt;");
    test[0] = test[0].replace(">", "&gt;");
    document.write("HTML-Tag: " + test[0]);
Was gibt dieses Programm aus? Vielleicht erwarten Sie als Ausgabe "<p>", denn das würde auf das angegebene Muster passen. Doch diese Annahme ist leider falsch, denn es wird wie gesagt immer ein möglichst großer Treffer zurückgeliefert, in diesem Falle also "<p>JavaScript</p>". Wenn Sie einen möglichst kleinen Treffer erzielen möchten, müssen Sie direkt nach einem Sonderzeichen zum Zählen (*, +, ?, {, }) den Fragezeichenoperator angeben. Folgender Code würde also in der Tat "<p>" ausgeben:
    var htmltag = /(<.*?>)/;
    var test = htmltag.exec("<p>JavaScript</p>");
    test[0] = test[0].replace("<", "&lt;");
    test[0] = test[0].replace(">", "&gt;");
    document.write("HTML-Tag: " + test[0]);
Wenn Sie diesen Code mit dem Internet Explorer 5.0x oder einer älteren Version ausführen (oder einem Anno-Tobak-Netscape), erhalten Sie entweder ein falsches Ergebnis oder eine Fehlermeldung. Der Internet Explorer 5.5 und auch die Nachfolgerversionen 6 und 7 unterstützen zwar kein JavaScript 1.5, haben aber diese Erweiterung der Syntax für reguläre Ausdrücke auch im Programm. Hier klicken, um das Bild zu Vergrößern Abbildung 9.11 Aktuelle Browser interpretieren den regulären Ausdruck richtig. 1 Diese Probleme könnten Sie natürlich vermeiden, wenn radiocheck ein Array wäre; allerdings erfordert dann die Überprüfung, ob sich in dem Array bereits ein bestimmtes Element befindet, einen extra Programmieraufwand. Natürlich gibt es reguläre Ausdrücke schon viel länger, aber mit der Verbreitung von Perl stieg auch die Verbreitung von regulären Ausdrücken.
<< zurück | <top> | vor >>
Zum Katalog
JavaScript und AJAX bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| JavaScript und AJAX - Das Video-Training
| Webseiten programmieren und gestalten
| XHTML, HTML und CSS
| CSS-Praxis
| AJAX
| PHP 5 und MySQL 5
| TYPO3 4.0
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2007
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de