Gaby: Array-Variablen in regulaeren ausdruecken!

Hallo Leute,
ich habe ein ganz kleines Problem:
ich moechte in einem regulaeren Ausdruck
den Wert einer Array-Variable angeben
z.B. so:

Sonderzeichen = new Array ("@","!","ö");

for(i = 0; i < Sonderzeichen.length; i++)
if Text.search(/Sonderzeichen[i])/) != -1)
      alert("Bitte keine Sonderzeichen verwenden");

Diese Syntax scheint irgendwie falsch zu sein.
Wer kann mir helfen?
Eure Gabi

  1. so ists falsch:

    if Text.search(/Sonderzeichen[i])/) != -1)

    und so richtig:
    if(Text.search(/Sonderzeichen[i]/) != -1)
    denk ich zumindest, weil du die anzahl der klammern, die du öffnest auch wieder schließen mußt. hab zwar von dem befehl Text.search noch nie was gehört und die / sehen auch komisch aus, aber wird schon klappen. was machtn der befehl? steht der im selfhtml (zu faul zum suchen)?
    wenn das nicht klappt, kannst du ja mal die " gegen ' austauschen...

    mfg michi

    1. so ists falsch:

      if Text.search(/Sonderzeichen[i])/) != -1)

      und so richtig:
      if(Text.search(/Sonderzeichen[i]/) != -1)
      denk ich zumindest, weil du die anzahl der klammern, die du öffnest auch wieder schließen mußt. hab zwar von dem befehl Text.search noch nie was gehört und die / sehen auch komisch aus, aber wird schon klappen. was machtn der befehl? steht der im selfhtml (zu faul zum suchen)?
      wenn das nicht klappt, kannst du ja mal die " gegen ' austauschen...

      mfg michi

      Oh, die Klammer hatte ich vergessen,
      aber daran liegt es leider leider nicht!

      Der Search-Befehl steht auf folgender Seite erklaert:
      http://www.teamone.de/selfhtml/tecl.htm#a20

      Gruss
      Gaby

  2. Hi!

    Sonderzeichen = new Array ("@","!","ö");
    for(i = 0; i < Sonderzeichen.length; i++)
    if Text.search(/Sonderzeichen[i])/) != -1)
          alert("Bitte keine Sonderzeichen verwenden");

    »»

    Diese Syntax scheint irgendwie falsch zu sein.

    Ist sie auch. Innerhalb der / wird 'Sonderzeichen' nicht als Variable interpretiert, sondern der String "Sonderzeichen" wird direkt in den RegExp eingefuegt. Es wird im Endeffekt immer nach "Sonderzeicheni" gesucht. (Auch das i wird als Zeichen genommen, nicht als Variable.

    Der Schluessel zur Loesung ist das RegExp-Objekt, mit dem Du *dynamisch* neue regulaere Ausdruecke erstellen kannst. Die Syntax findest Du auf http://developer.netscape.com/docs/manuals/js/client/jsref/regexp.htm beschrieben. Fuer Deinen Fall ergibt sich:
      if (Text.search(new RegExp(Sonderzeichen[i])) != -1)

    Eine Alternative waere noch die Verwendung von eval():
      var exp = eval('/' + Sonderzeichen[i] + '/');
      if (Text.search(exp) != -1)
    Falls Du mit eval() unzugehen weisst, weisst Du ja, was das bedeutet. Andernfalls solltet Du's besser lassen.

    Uebrigens solltest Du eine Variable nicht Text nennen, denn Text ist der Name des Objekts, das einzeilige INPUT-Felder kapselt. text (kleingeschrieben) ist dagegen in Ordnung.

    So long

  3. Hallo Gabi

    ich habe ein ganz kleines Problem:
    ich moechte in einem regulaeren Ausdruck
    den Wert einer Array-Variable angeben
    z.B. so:

    Sonderzeichen = new Array ("@","!","ö");

    for(i = 0; i < Sonderzeichen.length; i++)
    if Text.search(/Sonderzeichen[i])/) != -1)
          alert("Bitte keine Sonderzeichen verwenden");

    hier hast du drei Möglichkeiten, keine davon klappt mit Opera der Rest NN4,NN6 und IE gehen.

    //Dein String:

    ab="test@jsödd";

    //Lösung mit Arrays:

    Sonderzeichen = new Array ("@","!","ö");
    Sonderzeichen="["+Sonderzeichen.join("")+"]";
    Sonderzeichen=new RegExp(Sonderzeichen, "g")

    if (ab!=null) Zeichen=ab.match(Sonderzeichen)
    if (ab!=null) {alert("Bitte verwenden Sie nicht die Sonderzeichen:\n\n"+Zeichen);}

    //Lösung durch Angabe der erlaubten Zeichen (die verwende ich immer):

    if (ab!=null) Zeichen=ab.match(/[^§!+/?`´'*- üäÜÖÄß;:a-zA-Z_0-9]/g)
    if (Zeichen!=null) {alert("Bitte verwenden Sie nicht die Sonderzeichen:\n\n"+Zeichen);}

    //Lösung durch Angabe der nicht erlaubten Zeichen:

    if (ab!=null) Zeichen=ab.match(/[@!ö]/g)
    if (Zeichen!=null) {alert("Bitte verwenden Sie nicht die Sonderzeichen:\n\n"+Zeichen);}

    Viele Grüße

    Antje