jack: RegEx "1997-1998"

Hallo,

aktuell komme ich nicht wirklich klar. Ich suche einen regulären Ausdruck der nur auf Jahreszahlen von 1997 bis 2010 zutrifft welche mit einem "-" getrennt sind. Dabei ist zu beachten, dass die hintere Zahl nur eine Stelle größer sein darf als die erste.

Beispiel:

"1996-1997" => RegEx soll nicht zutreffen
"1997-1998" => RegEx soll zutreffen
"2000-2001" => RegEx soll zutreffen
"2000-2003" => RegEx soll nicht zutreffen
"2010-2011" => RegEx soll nicht zutreffen

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und es kann mir jemand etwas weiterhelfen.

Vielen Dank
Jack

  1. @@jack:

    nuqneH

    Ich suche einen regulären Ausdruck

    Warum?

    der nur auf Jahreszahlen von 1997 bis 2010 zutrifft

    Du möchtest also mit Zahlen operieren.

    welche mit einem "-" getrennt sind.

    Warum? der Halbgeviertstrich "–" U+2013 en dash wäre (in Texten) das passende Zeichen.

    Dabei ist zu beachten, dass die hintere Zahl nur eine Stelle größer sein darf als die erste.

    Auf die Gefahr hin, dass ich mich wiederhole: Du möchtest also mit Zahlen operieren.

    http://de.selfhtml.org/javascript/objekte/string.htm#substr@title=Teilstrings in numerische Werte http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=umwandeln, deren Differenz mit 1 vergleichen.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Warum? Weil ich eine Eingabe, welche in beschriebenen Format (in diesem und in keinem anderen) "kommt" validieren muss.

      Jack

      1. Warum? Weil ich eine Eingabe, welche in beschriebenen Format (in diesem und in keinem anderen) "kommt" validieren muss.

        Jack

        +mit einem regulären Ausdruck.

        1. @@jack:

          nuqneH

          +mit einem regulären Ausdruck.

          Nein, - mit einem regulären Ausdruck.

          Also + ohne einen regulären Ausdruck.

          Qapla'

          PS: Das macht Heißhunger auf + Milch - Kakao.

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Also + ohne einen regulären Ausdruck.

            Was dann schlampig geschrieben so aussehen könnte :D

              
            var_dump((strlen($inp)==9) && ($inp{4}=="-") && is_numeric($n1=substr($inp,0,4)) && is_numeric($n2=substr($inp,5,9)) && ($n1>=1997) && ($n2<=2010) && ($n2-$n1==1));  
            
            

            Bestimmt gehts eleganter, aber mit einem regulären Ausdruck dürfte das noch übler werden.

            1. Ich habe doch nichts von PHP gesagt, dummerweise leider (wie ich gerade feststellen muss) auch nicht das es in einer RewriteCond zum Einsatz kommt. Daher brauch ich einen RegEx.

              1. Hi jack!

                Ich habe doch nichts von PHP gesagt, dummerweise leider (wie ich gerade feststellen muss) auch nicht das es in einer RewriteCond zum Einsatz kommt. Daher brauch ich einen RegEx.

                Dann bleibt dir nur die Möglichkeit, jeden einzelnen Fall abzubilden.

                MfG H☼psel

                --
                "It's amazing I won. I was running against peace, prosperity, and incumbency."
                George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
              2. @@jack:

                nuqneH

                dummerweise

                Ja.

                leider (wie ich gerade feststellen muss) auch nicht das es in einer RewriteCond zum Einsatz kommt. Daher brauch ich einen RegEx.

                Der liefe wohl darauf hinaus, alle erlaubten Strings aufzuzählen: ^1997-1998$|^1998-1999$|…

                Oder du brauchst mehrere RewriteConds.

                Oder du schilderst mal dein Problem.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
            2. Hi,

              Bestimmt gehts eleganter, aber mit einem regulären Ausdruck dürfte das noch übler werden.

              Insbesondere da das Rechnen in regulären Ausdrücken nicht möglich ist - da dürfte es nicht viel mehr Möglichkeiten geben, als die 13 möglichen Werte als Alternativen anzugeben:

              ^(?:1997-1998|1998-1999|1999-2000|2000-2001|2001-2002|2002-2003|2003-2004|2004-2005|2005-2006|2006-2007|2007-2008|2008-2009|2009-2010)$

              Vielleicht kann man da noch einige Fälle etwas (die zwei Gruppen mit jeweils gemeinsamen ersten 3 Ziffern) zusammenfassen:
              ^(?:199(?:7-1998|8-1999|9-2000)|200(?:0-2001|1-2002|2-2003|3-2004|4-2005|5-2006|6-2007|7-2008|8-2009|9-2010))

              Ob das allerdings wartbarer ist?

              Sehr viel mehr wird da m.E. nicht zu vereinfachen möglich sein.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
            3. Bestimmt gehts eleganter, aber mit einem regulären Ausdruck dürfte das noch übler werden. In PHP sicher!

              Perl

                
              if(  
                /(\d{4})-(\d{4})/  
                and $2-$1 ==1  
                and $1>1996  
                and $2<2011  
              ){ #whatever }  
              
              

              Mit Hilfe von Codeblöcken direkt in der RE:
              ungetestet:

              /^(199[7-9]|200[0-9])-(??{\1 + 1})$/ and whatever();

              mfg Beat

              --
              Surftipp:
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
      2. @@jack:

        nuqneH

        Warum? Weil ich eine Eingabe, welche in beschriebenen Format (in diesem und in keinem anderen) "kommt" validieren muss.

        Die Frage war nicht, warum du bestimmte Jahreszahlenangaben erkennen willst, sondern warum du dies mit regulärem Ausdruck zu tun gedachtest.

        Ich habe im letzten Teilsatz bewusst die Vergangenheitsform verwendet. Ich hoffe, berechtigt.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)