Phoenix: Senkrechter Strich

Folgende Funktion funktioniert nicht:

function chkKey()
{
var chk = new RegExp("|");
var key = chk.test(document.form.titel.value);
if (key = true) {
alert("Zeichen "|" gefunden");
}
}

Es klappt mit normalen Zeichen, aber nicht mit dem senkrechten Strich. Auch | dieser Versuch funktionierte nicht. Wie heißt es so schön, any idea? Danke!

  1. Hi,

    Folgende Funktion funktioniert nicht:

    Funktioniert nicht ist keine sehr aussagekräftige Fehlerbeschreibung, aber ich gehe mal davon aus, dass du meinst, dass das alert() nicht so aufgerufen wird wie du willst.

    function chkKey()
    {
    var chk = new RegExp("|");
    var key = chk.test(document.form.titel.value);
    if (key = true) {

    Das ist eine Zuweisung, die immer true zurückliefert. Du willst aber eine Abfrage denke ich mal.

    alert("Zeichen "|" gefunden");
    }
    }

    Es klappt mit normalen Zeichen, aber nicht mit dem senkrechten Strich. Auch | dieser Versuch funktionierte nicht.

    | ist in RegExps ein Zeichen mit Sonderbedeutung. Du musst es auf jeden Fall mit Backslash(s) maskieren, wenn du es in einem String suchen willst. Ich würde es intuitiv mal mit "\|" versuchen, wobei ich es nicht getestet hab.

    mfG,
    steckl

    1. | ist in RegExps ein Zeichen mit Sonderbedeutung. Du musst es auf jeden Fall mit Backslash(s) maskieren, wenn du es in einem String suchen willst. Ich würde es intuitiv mal mit "\|" versuchen, wobei ich es nicht getestet hab.

      mfG,
      steckl

      Klappt leider nicht, egal wieviele Backslashs ich verwende. Geht das in Javascript etwa nicht?

  2. Folgende Funktion funktioniert nicht:

    Bei mir funktioniert sie.

    Struppi.

    1. Folgende Funktion funktioniert nicht:

      Bei mir funktioniert sie.

      Struppi.

      Es ist bei mir wie steckl sagt, die Funktion liefert immer einen Wert true. Das Ergebnis soll aber nur = true sein, wenn der senkrechte Strich auch in einem String vorhanden ist.

      1. Es ist bei mir wie steckl sagt, die Funktion liefert immer einen Wert true. Das Ergebnis soll aber nur = true sein, wenn der senkrechte Strich auch in einem String vorhanden ist.

        Stimmt ich hab's nicht richtig getestet, dein Problem liegt aber nicht an der RegExp sondern daran dass du nicht richtig vergleichst, in JS (und vielen anderen Programmiersprachen) wird ein Vergleich mit einem doppelten Gleichheitszeichen ausgedrückt, ist aber in deinem Fall auch überflüssig, da es so ausreichen würde:

        function chkKey(val)  
        {  
        var chk = new RegExp(/\|/);  
        if (chk.test(val)) alert("Zeichen \"|\" gefunden");  
        }  
        
        

        Struppi.

        1. Sehr gut, klappt. Danke, ich weiss nur nicht wieso.

          var chk = new RegExp(/|/);

          Wäre noch dankbar für einen Hinweis zum besseren Verständnis.
          Der Backslash ist die Maskierung für den senkrechten Strich, richtig?
          Die Schrägstriche davor bzw. danach bedeuten was?

          Herzlichen Dank.

          1. Sehr gut, klappt. Danke, ich weiss nur nicht wieso.

            Weil if(ausdruck) prüft ob ausdruck wahr ist und wahr ist entweder true, eine Zahl ungleich Null, ein Objekt ungleich null oder ein nicht leerer string:

            Diese Ausdrücke sind alle wahr:

            if(true) alert(1);  
            if(1)alert(2);  
            if({}) alert(3);  
            if('x') alert(4);
            

            var chk = new RegExp(/|/);

            Wäre noch dankbar für einen Hinweis zum besseren Verständnis.
            Der Backslash ist die Maskierung für den senkrechten Strich, richtig?

            Ja, in einem Regulären Ausdruck ist das das Zerichen für oder.

            Die Schrägstriche davor bzw. danach bedeuten was?

            Einen Regulären Ausdruck. Du kannst auch schreiben:

            var chk = /\|/;  
            
            

            new regExp() hat den Vorteil, dass du hier einen String verwenden kannst, den du brauchst wenn in dem ausdruck eine Variabel vorkommt.

            Struppi.

            1. Herzlichen Dank!