Regex entspricht 2-10, aber nicht 99

7

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;

    
peacedog 09.02.2009, 16:19
quelle

6 Antworten

20

Sie brauchen dafür Klammern. Ich würde Bereiche weiter verwenden, um die Dinge lesbar zu halten:

%Vor%     
soulmerge 09.02.2009, 16:33
quelle
46

Dies ist eindeutig ein Fall, in dem Sie RegExp nicht als numerische Auswertung verwenden sollten:

%Vor%     
Georg Schölly 09.02.2009 16:28
quelle
7

Verwenden Sie Klammern um die Alternationen, da die Verkettung eine höhere Priorität hat als die Alternierung:

%Vor%     
Adam Rosenfield 09.02.2009 16:21
quelle
1

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.

    
Kris 09.02.2009 17:07
quelle
0

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) $

    
Glen Solsberry 09.02.2009 16:21
quelle
0

Dieses Online-Dienstprogramm ist sehr gut in der Lage, Werte für numerische Bereiche zu generieren: Ссылка . Für den Bereich 2-10 einschließlich gibt es diesen Ausdruck: \b0*([2-9]|10)\b . Wenn Sie führende Nullen weglassen wollen, nehmen Sie den "0 *" Teil heraus.

    
PaulMcG 30.08.2010 14:52
quelle