Josef Reichardt: Nur bestimmte Zeichen in <input type="text"> erlauben...

Hallo!
Ich bin zur Zeit am Basteln eines Formulares das mit JavaScript kotrolliert wird.
Ich habe eine Zeile (name="line") in der nur folgende Zeichen geschrieben werden sollen:
1 2 3 4 5 6 7 8 9 0 , + - * / ( )
Ich habe schon überall nach einer richtigen Lösung gesucht, habe aber nichts gefunden. Ich habe jetzt mal ein Script geschrieben, dass lässt aber wieder nur Zahlen zu und nicht die entsprechenden Sonderzeichen! Ist da was falsch?

function checknumber1() {
 var chkZ = 1;
 var nonumber = document.rechner.line.value;
 for(i=0;i<document.rechner.line.value.length;++i)
   if(document.rechner.line.value.charAt(i) < "0"
   || document.rechner.line.value.charAt(i) > "9"
   || document.rechner.line.value.charAt(i) != ","
   || document.rechner.line.value.charAt(i) > "+"
   || document.rechner.line.value.charAt(i) > "-"
   || document.rechner.line.value.charAt(i) > "*"
   || document.rechner.line.value.charAt(i) > "/"
   || document.rechner.line.value.charAt(i) > "("
   || document.rechner.line.value.charAt(i) > ")")
     chkZ = -1;
 if(chkZ == -1) {
  alert('Ungültiger Wert!')
  document.rechner.line.value = ""
   }
 }

Hoffe ihr könnt mir helfen!

MfG

Josef Reichardt

  1. Hi!

    Warum nicht bei jedem onChange oder onKeyPress die Funktion aufrufen und über eine Regexp nachgucken, ob nicht erlaubte Zeichen drin sind.

    var erlaubt = "1234567890,+-*/()";
    var regexp  = /[^$erlaubt]/;
    var formval = document.rechner.line.value;
    var ergebnis= regexp.exec(formval);

    Ich bin nicht so gut in javascript, aber damit müßte die funktion dann alle nicht erlaubten Zeichen im input-string finden.

    csx

    1. Hi!

      var erlaubt = "1234567890,+-*/()";
      var regexp  = /[^$erlaubt]/;
      var formval = document.rechner.line.value;
      var ergebnis= regexp.exec(formval);

      Das sieht zwar ganz gut aus, aber irgendwie kapier ich das mit dem regexp nicht ganz, auch mit der Beschreibung im selfhtml nicht!
      Wie kann das script hier heraus finden ob nicht-erlaubte Zeichen enthalten sind und gegebenen Falls eine function aufrufen?

      1. Hi!

        var erlaubt = "1234567890,+-*/()";
        var regexp  = /[^$erlaubt]/;
        var formval = document.rechner.line.value;
        var ergebnis= regexp.exec(formval);

        Das sieht zwar ganz gut aus, aber irgendwie kapier ich das mit dem regexp nicht ganz, auch mit der Beschreibung im selfhtml nicht!
        Wie kann das script hier heraus finden ob nicht-erlaubte Zeichen enthalten sind und gegebenen Falls eine function aufrufen?

        Ich kenn den RegExp-Syntax bei javascript leider nicht so richtig. Der Ausdruck

        var regexp  = /[^1234567890,+-\*/()]/;

        besagt aber (die Sonderzeichen müssen durch vorangestelltes \ escapt werden), daß in der Zeichenkette, auf die der Ausdruck angewendet wird, folgendes gesucht wird:

        Die [ ] bedeutet ODER. Es wird also nicht nach der Zeichen_kette_ gesucht, sondern nach 1 oder 2 oder 3 oder...

        Das ^ bedeutet NICHT. Also wird nach allem gesucht, was NICHT 1 oder 2 oder 3 oder ...etc pp. ist.

        Wenn der Ausdruck also etwas zurückgibt, dann hast du ein Zeichen gefunden, was nicht erlaubt ist. Wenn der Ausdruck FALSE (oder 0 oder  so, wie gesagt, mußt mal unter eval() nachgucken) zurückgibt, dann hat er keine verbotenen Zeichen gefunden.

        So zumindest die Theorie hehe ;)

        Gruß
        csx

  2. hi,

    if(document.rechner.line.value.charAt(i) < "0"
       || document.rechner.line.value.charAt(i) > "9"
       || document.rechner.line.value.charAt(i) != ","
       || document.rechner.line.value.charAt(i) > "+"
       || document.rechner.line.value.charAt(i) > "-"
       || document.rechner.line.value.charAt(i) > "*"
       || document.rechner.line.value.charAt(i) > "/"
       || document.rechner.line.value.charAt(i) > "("
       || document.rechner.line.value.charAt(i) > ")")

    überlege dir mal, worauf deine bedingung alles zutrifft.

    zum beispiel alleine er ausdruck
    document.rechner.line.value.charAt(i) != ","
    sorgt doch schon dafür, dass _alles_ (einschliesslich der _erlaubten_ sonstigen zeichen) ausser einem komma die _gesamte_ bedingung erfüllt, da du alles mit OR verknüpfst.

    gruss,
    wahsaga