Ludger Keitlinghaus: regulaerer Ausdruck gesucht

Hi,

wie lautet der regulaere Ausdruck der alles findet, das nicht im Format
 <Ziffer><Ziffer><Ziffer><Ziffer>-<Ziffer><Ziffer>-<Ziffer><Ziffer>
daherkommt?

Gruss,
Ludger,
der sich selbst schon lange mit der Antwort beschaeftigt hat, aber erfolglos war

  1. Hallo Ludger!

    Hab selber bisher erst einmal mit RE zu tun gehabt, aber ich versuch's mal:

    "[1]{4}-[0-9]{2}-[0-9]{2}$"

    ungetestet...

    Gruß

    Matthias

    --
    ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
    http://www.makaio.de/quotations

    1. 0-9 ↩︎

    1. Hi,

      Hab selber bisher erst einmal mit RE zu tun gehabt, aber ich versuch's mal:

      "[1]{4}-[0-9]{2}-[0-9]{2}$"

      danke, ich hatte das '-' nicht maskiert. Stopp, ausserdem bin ich ohne '^' und '$' am Start gewesen.

      Gruss,
      Ludger


      1. 0-9 ↩︎

      1. hi!

        "[1]{4}-[0-9]{2}-[0-9]{2}$"

        danke, ich hatte das '-' nicht maskiert. Stopp, ausserdem bin ich ohne '^' und '$' am Start gewesen.

        das '-' muss auch gar nicht maskiert werden.

        prost
        seth


        1. 0-9 ↩︎

        1. Hi,

          "[1]{4}-[0-9]{2}-[0-9]{2}$"

          danke, ich hatte das '-' nicht maskiert. Stopp, ausserdem bin ich ohne '^' und '$' am Start gewesen.

          das '-' muss auch gar nicht maskiert werden.

          es deutet tatsaechlich einiges darauf hin, dass das stimmt: [http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#maskierung]

          Ich habe jetzt auch folgenden Code am Start:
           function validateDateBlur(element)
            {
            if (thisForm[element].value.search(/[0-9]{4}-[0-9]{2}-[0-9]{2}/) == -1)
             {
             thisForm[element].value = '';
             }
            }

          Ich will also alle Zeichenketten erwischen, die _nicht_ dem Muster entsprechen. Zudem habe ich auf '^' und '$' verzichtet.
          '^' (Huetchensymbol ;-) soll wohl eine Negation bewirken, '$' findet nur Muster, die am Ende des Ausdrucks sich befinden.

          Was waere denn jetzt richtig? (alles finden ausser Muster '<ZIFFER><ZIFFER><ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>')

          Gruss,
          Ludger


          1. 0-9 ↩︎

          1. Hallo Ludger.

            Ich habe jetzt auch folgenden Code am Start:
              if (thisForm[element].value.search(/[0-9]{4}-[0-9]{2}-[0-9]{2}/) == -1)

            Das matcht auch auf 'ISBN 1234-56-78 (2004)'. Soll es doch aber nicht, oder?

            Ich will also alle Zeichenketten erwischen, die _nicht_ dem Muster entsprechen. Zudem habe ich auf '^' und '$' verzichtet.

            Das ist der Fehler. '^' innerhalb einer Zeichenklasse bedeutet Negieren dieser Klasse, in allen anderen Fällen bedeutet es, dass der dahinter folgende Ausdruck am Anfang des zu durchsuchenden Strings stehen muss. Statt [0-9] kannst du auch '\d' benutzen. Also so:

            '/^\d{4}-\d{2}-\d{2}$/'

            Die Verneinung hast du ja schon über die Abfrage des Ergebnisses der search-Methode (-1)realisiert.

            Freundschaft!
            Siechfred

            --
            Wissen bedeutet zu wissen, wo es steht.
            1. Hi,

              Ich habe jetzt auch folgenden Code am Start:
                if (thisForm[element].value.search(/[0-9]{4}-[0-9]{2}-[0-9]{2}/) == -1)

              Das matcht auch auf 'ISBN 1234-56-78 (2004)'. Soll es doch aber nicht, oder?

              Naja, ich mache noch eine Laengenpruefung.   ;-)

              Die Verneinung hast du ja schon über die Abfrage des Ergebnisses der search-Methode (-1)realisiert.

              Es funzt ja auch irgendwie.   :-(
              Allerdings wuerde ich den regExp
               [1]{4}-[0-9]{2}-[0-9]{2}$
              schon gerne so fit haben, dass er alles findet, was nicht
               <ZIFFER><ZIFFER><ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>
              ist, also i.p. Laenge (also das '^' und '$' ?) und i.p. Negation.

              Gruss,
              Ludger

              --
              "Machts der Gerd nicht, machts der Franz."

              1. 0-9 ↩︎

              1. Hallo Ludger.

                Allerdings wuerde ich den regExp
                 [1]{4}-[0-9]{2}-[0-9]{2}$
                schon gerne so fit haben, dass er alles findet, was nicht
                 <ZIFFER><ZIFFER><ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>-<ZIFFER><ZIFFER>
                ist, also i.p. Laenge (also das '^' und '$' ?) und i.p. Negation.

                Was genau suchst du? Meinst du sowas:

                var Muster = '/^(.*)(\d{4}-\d{2}-\d{2})(.*)$/'  // der RegEx
                if(Muster.test(wert) {                          // liefert true, wenn der RegEx passt
                  Muster.exec(wert);                            // RegEx im Erfolgsfall anwenden
                  alert("Davor: '"+RegExp.$1+"'");
                  alert("Treffer; '"+RegExp.$2+"'");
                  alert("Danach: '"+RegExp.$3+"'");
                }

                Liefert bei Wert 'ISBN 1234-56-78 (2004)':
                Davor: 'ISBN '
                Treffer: '1234-56-78'
                Danach: ' (2004)'

                Oder verstehe ich dich völlig falsch?

                Freundschaft!
                Siechfred

                --
                Wissen bedeutet zu wissen, wo es steht.

                1. 0-9 ↩︎

                1. Hi,

                  Oder verstehe ich dich völlig falsch?

                  ich bin da wohl im Ausdruck einfach zu unpraezise, vermutlich weil ich die RegExp noch nicht intensiver bearbeitet habe.

                  Ich analysiere Zeichenketten und wenn diese nicht exakt die Laenge 10 haben und dem Schema <Ziffer><Ziffer><Ziffer><Ziffer>-<Ziffer><Ziffer>-<Ziffer><Ziffer> entsprechen, will ich als Rueckgabewert einen '', ansonsten die schemakonforme (valide ;-) Zeichenkette.

                  Ich arbeite zurzeit mit einer Laengenueberpruefung und dem RegExp
                   /[0-9]{4}-[0-9]{2}-[0-9]{2}/
                  erfolgreich, aber ich arbeite mit einem "search" und einer Laengenueberpruefung. Beides koennte man doch in den RegExp packen und mit einem "replace" kommen, das waere doch schoener.

                  Also sowas wie:
                   thisForm[element].value.replace('/[0-9]{4}-[0-9]{2}-[0-9]{2}/','');

                  Das heisst ich benoetige fuer den Ausdruck
                   /[0-9]{4}-[0-9]{2}-[0-9]{2}/
                  a) eine Negation
                  b) einen Anfang und ein Ende (wobei ich eben das Huetchensymbol und das Dollarzeichen noch nicht ganz verstanden habe.)

                  Muesste doch gehen, oder?   :-)

                  Gruss,
                  Ludger

                  1. hi!

                    Ich analysiere Zeichenketten und wenn diese nicht exakt die Laenge 10 haben und dem Schema <Ziffer><Ziffer><Ziffer><Ziffer>-<Ziffer><Ziffer>-<Ziffer><Ziffer> entsprechen, will ich als Rueckgabewert einen '', ansonsten die schemakonforme (valide ;-) Zeichenkette.

                    ich wuerde es so machen:

                    function foo(str)
                     var s=str;
                     if(s.search(/^\d{4}-\d\d-\d\d$/)==-1) s='';
                     return s;
                    }

                    b) einen Anfang und ein Ende (wobei ich eben das Huetchensymbol und das Dollarzeichen noch nicht ganz verstanden habe.)

                    ^ heisst anfang, $ heisst ende.
                    mehr dazu auf http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#zeichenketten

                    prost
                    seth