Ich habe ein Feld in einem Formular mit den folgenden Werten: -1, 2-10, 99
Ich habe eine Geschäftsregel, die sich mit den Antworten 2-10 beschäftigt.
Ich versuche, einen regulären Ausdruck zu schreiben, der 2-10 aber nicht 99 entspricht, und ich habe Probleme.
Der ursprüngliche Ausdruck:
%Vor%schlägt fehl, weil 99 (technisch, zweimal) übereinstimmt. Auch die Line-Grenzen sind etwas, mit dem ich mich nie wohl gefühlt habe. Ich halte in Expresso ein anderes Verhalten von ihnen als an anderen Orten (z. B. .net). In dieser bestimmten Instanz wird die Regex in JavaScript ausgeführt. Wie auch immer, Expresso scheint sie zu ignorieren (und wenn ich die Werte in Klammern setze:
%Vor%entweder "alles aus geschrieben" oder als ein Bereich, Expresso gibt keine Übereinstimmungen zurück, wenn ich die öffnende Linie / die Zeichenfolge schließende Zeile / Zeichenfolge Zeichen (und ja, ich habe versucht, die 10 getrennt im zweiten Fall dort übereinstimmen) .
Ich weiß, ich weiß. Wenn Sie ein Regex verwenden, um ein Problem zu lösen, dann haben Sie zwei Probleme (und vermutlich werden sie Freunde einladen, Ding 1 und Ding 2 Stil). Ich habe nicht hier einen zu verwenden; Ich kann zu einer Case-Anweisung wechseln. Aber es scheint, als ob ich hier einen Regex benutzen könnte, und es scheint vernünftig zu sein. Ich bin immer noch ziemlich grün, wenn es um die Regex geht;Dies ist eindeutig ein Fall, in dem Sie RegExp nicht als numerische Auswertung verwenden sollten:
%Vor%Verwenden Sie Klammern um die Alternationen, da die Verkettung eine höhere Priorität hat als die Alternierung:
%Vor%Eine vollständige Javascript-Funktion, um entweder 2 bis 9 oder 10
zu entsprechen %Vor%Die Regex kann leicht erweitert werden, um alle Ihre Regeln zu berücksichtigen:
%Vor%edit: Ich habe vergessen zu erwähnen, dass du deine eigene wahre / falsche Situationslogik ersetzen musst. edit2: Die zweite Klammer wurde mit der fehlenden Klammer ergänzt.
Der Grund, warum Ihr ursprünglicher Ausdruck fehlschlägt, ist, dass Sie mit ^ 2, 3, 4, 5, 6, 7, 8, 9, 10 $ übereinstimmen.
Probieren Sie diese Regex: ^ (2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) $
Tags und Links javascript regex numeric-ranges