2009-03-27 19 views
22

Ich habe eine Liste von Texteinträgen, die ein Benutzer in die Datenbank eingeben kann, und ich muss diese Eingaben mit regulären Ausdrücken validieren, weil einige von ihnen komplex sind. Eines der Felder muss Lücken in den Zahlen aufweisen (d. H. 10, 12, 14, 16 ...). Meine Frage ist, gibt es ein Regex-Konstrukt, das es mir erlauben würde, nur ungerade oder ungerade Läufe zu vergleichen? Ich weiß, dass ich diesen Wert herausziehen und eine Divisionsprüfung durchführen kann, aber ich habe, wenn möglich, auf eine reine Regex-Lösung gehofft.Regulärer Ausdruck für nur ungerade oder gerade Zahl

[Bearbeiten]

Die Lösung, die ich auf dieser Verwendung beendet wurde, weil eine Anpassung von JaredPar die zusätzlich nur ungerade ist zu benötigen oder nivelliert ich auch durch einen Bereich zu beschränken, benötigt (dh alle geraden Zahlen zwischen 10-40). Unten ist Regex fertig.

^[123] [02468] $

+0

Die {1} 's in Ihrem regex sind wahrscheinlich völlig unnötig, wenn Ihr Regex-Engine kann sich von meiner unterscheiden. –

+0

Dieser Regex wird Zahlen bis zu 48 entsprechen. Wenn Sie es bei 40 begrenzen möchten, benötigen Sie:^[123] [02468] | 40 $ –

+1

Und Chris hat Recht: {1} in einer Regex ist reines Rauschen, nein egal, welchen Regex-Geschmack du verwendest. –

Antwort

45

ungerade Zahlen

"^\d*[13579]$" 

Auch Zahlen

"^\d*[02468]$" 

Run von Quoten mit a, und potenzielle Leerzeichen Separator

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$" 

Run of Evens mit ein, und das Potenzial Leerzeichen Separator

"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$" 
+0

Sie sind wirklich ** smart ** –

1

Meinen Sie damit so etwas wie:

/(\d*[02468](, *\d*[02468]))|(\d*[13579](, *\d*[13579]))/ 

oder einer der drei anderen möglichen Interpretationen der Frage der Fassung?

+0

Ich denke, Sie müssen auch die zweite Untergruppe in jeder Gruppe Stern, nein? –

5

Der Regex ist eigentlich nicht zu schwer zu entwerfen, wenn man bedenkt, dass eine gerade oder ungerade Zahl getestet werden kann, indem man nur die letzte Ziffer betrachtet, die gerade oder ungerade sein muss. So ist die Regex für ungerade Zahl läuft sein könnte:

"^(\s*\d*[13579]\s*,)*(\s*\d*[13579]\s*)$" 

Ersetzen Sie [13579] durch [02468] für gerade Zahlen ...

Verwandte Themen