RegEx "1997-1998"
jack
- sonstiges
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
@@jack:
nuqneH
Ich suche einen regulären Ausdruck
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'
Warum? Weil ich eine Eingabe, welche in beschriebenen Format (in diesem und in keinem anderen) "kommt" validieren muss.
Jack
Warum? Weil ich eine Eingabe, welche in beschriebenen Format (in diesem und in keinem anderen) "kommt" validieren muss.
Jack
+mit einem regulären Ausdruck.
@@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.
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.
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.
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
@@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'
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
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
@@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'