Brauche Hilfe bei der Interpretation einer Funktion: check Formular - nur Zahlen

awnetti

Mitglied
Ich verstehe leider (noch) nicht viel von Javascript, kann mir also die folgende Funktion nicht wirklich erklären.
Habe ein JS zum Prüfen eines Formulars gefunden und würde es gerne für meine Bedürfnisse modifizieren. Habe auch schon im Netz recherchiert und Einbisschen was herausgefunden.

Hier das JS:

Code:
function checkForm(el)
{
  var val = el.value.replace(/[^\.^,\d]/g, '');
  el.value = val;
}

Hier das HTML:

Code:
<input type=”text” maxlength=”3” onKeyUp=” checkForm(this);” />


Hier wie ich das interpretiere bzw. was ich nicht verstehe:

- eine Funktion, die bei onKeyUp ausgelöst wird
- der Inhalt wird auf Punkt . Komma , und Zahlen \d geprüft und bei falscher Eingabe geleert ’’
- dabei verstehe ich die Schreibweise nicht:
Code:
(/[^\.^,\d]/g, '')
- ^ = Zeilenanfang! Wieso steht das auch noch vor dem Komma? Müsste einmal ^ für Zeilenanfang nicht reichen und wieso fehlt kein $ für Zeilenende!?
- Wieso kann das Komma ohne \ stehen und der Punkt nicht?
- Wofür steht das „g,“ nach dem /
- Und letzte Frage: das „el“ wofür steht das? Ist das variabel und dient dazu die Eingabe zu übergeben?

Ich gebe zu, habe mehr Fragen als Antworten. Ich komme aber selbst echt nicht weiter. Wäre also froh wenn jemand hier Licht ins Dunkel bringen würde.
Bitte übrigens auch um Info falls ich da oben irgendetwas falsch interpretiert haben sollte.

1000 Dank im Voraus!
awnetti
 
- Und letzte Frage: das „el“ wofür steht das? Ist das variabel und dient dazu die Eingabe zu übergeben?
Das "el" ist einer der Funktionsparameter also eine Variable, die beim Aufruf der Funktion eben jener Funktion übergeben wird. Der Aufruf geschieht, wie du schon festgestellt hast, sobald eine Taste losgelassen wird. Der Funktion wird "this" übergeben, also das aktuelle Objekt sprich das <input>-Feld. Das sagt uns das 'onKeyUp=” checkForm(this);”'. Somit steht in der Funktion el für das <input>-Feld.

- Wieso kann das Komma ohne \ stehen und der Punkt nicht?
Der Punkt steht in regulären Ausdrücken wie dem, für jedes beliebige Zeichen. Der Ausdruck ".ast" würde aslo "Last", "Mast", "Rast" oder z.B. auch "%ast" finden. Der Punkt hat also eine Sonderbedeutung in regulären Ausdrücken. Daher muss man dem Computer irgentwie mitteilen, dass der normale Punkt gemeint ist, nicht der Platzhalter für jedes beliebige Zeichen. Das tut man, indem man das Escape Zeichen ("\" den Backslash voransetzt). Vor das Komma muss kein Backslash, weil nur das normale Komma gemeint sein kann, denn das hat in regulären Ausdrücken keine Bedeutung.

- Wieso kann das Komma ohne \ stehen und der Punkt nicht?
Der Punkt steht in regulären Ausdrücken wie dem, für jedes beliebige Zeichen. Der Ausdruck ".ast" würde aslo "Last", "Mast", "Rast" oder z.B. auch "%ast" finden. Der Punkt hat also eine Sonderbedeutung in regulären Ausdrücken. Daher muss man dem Computer irgentwie mitteilen, dass der normale Punkt gemeint ist, nicht der Platzhalter für jedes beliebige Zeichen. Das tut man, indem man das Escape Zeichen ("\" den Backslash voransetzt). Vor das Komma muss kein Backslash, weil nur das normale Komma gemeint sein kann, denn das hat in regulären Ausdrücken keine Bedeutung.

- ^ = Zeilenanfang! Wieso steht das auch noch vor dem Komma? Müsste einmal ^ für Zeilenanfang nicht reichen und wieso fehlt kein $ für Zeilenende!?
Der Cirumflex steht in diesem Fall ausnahmsweise mal nicht für den Zeilenanfang. In eckigen Klammern steht der Cirumflex für das Komplement, also das Gegenteil. Die eckigen Klammern leiten übrigens eine Zeichenklasse ein. "[abc]" findet also das a in "ganz", das b in "bin" und das c in "christ". Wenn jetzt ein Komplement davorsteht findet es alle zeichen, die eben kein a, b oder c sind". Hier im Beispiel findet also das "^\." alle Zeichen, die eben kein Punkt sind.
Damit löscht die Funktion "checkForm()" also alles, was nicht Komma, Punkt oder eine Zahl ist. Es bleiben also nur Zahlen, Kommata und Punkte stehen.

Ganz nebenbei muss nicht überall, wo ein Cirumflex für Zeilenanfang steht auch ein $ für das Zeilenende sein. "^abc" findet die drei forderen Buchstaben im Aplpabet am Zeilenanfang, egal was noch dahinter steht. Das Zeilenende ist dabei irelevant.

Hoffe das war einigemaßen verständlich und hat dir weitergeholfen. Wenn du mehr über reguläre Ausdrücke wissen willst, benutze den > Link <.
 
Zuletzt bearbeitet:
Wow, vielen Dank. Das war sehr hilfreich.

Aber eine Frage bleibt mir doch, dazu konnte ich bisher noch keine Antwort finden.

Code:
(/[^\.^,\d]/g, '')

Wofür steht das „g,“ nach dem „/" ?

Danke auch für den Linktipp. Da werde ich mich sofort mal umschauen.

Übrigens, habe ich in der Zwischenzeit auch noch eine interessante Seite mit Erklärungen zu „Regulären Ausdrücken“ gefunden. Hier der Link

Danke nochmal und schönen Gruß
awnetti
 
Ah, okay die Frage habe ich wohl ausversehen gelöscht. Das g steht für "greedy" engl. gierig. Normalerweise würde der reguläre Ausdruck "/f/" nur das erste Vorkommen finden. In "Schifffahrtgesellschaft" würde also nur das fett markierte f gefunden und danach keines mehr. Will mal alle f finden, inclusife des f in "gesellschaft", dann braucht man den greedy-Modifier, das g.
 
Okay danke! Hab direkt was rum getestet und natürlich direkt auf Probleme gestoßen.

Bzw. Telefon-Abfrage klappt wurderbar:

Code:
function checkTel(el){
  var val = el.value.replace(/[^\d\s\(\)\-\/]/g, '');
  el.value = val;
}

Aber wieso klappt diese Straßen-Abfrage nicht?:
Alles was nicht . und ein beliebiger Buchstabe ist, soll gelöscht werden.

Code:
function checkStr(el){
  var val = el.value.replace(/[^\.^\w]/g, '');
  el.value = val;
}

Hab ich doch was falsch verstanden?
 

Neue Beiträge

Zurück