2010-05-27 27 views
9

Ich versuche, eine Regex zu erstellen, die akzeptieren: Eine leere Zeichenfolge, eine einzelne ganze Zahl oder mehrere ganze Zahlen getrennt durch ein Komma, aber kann kein Anfang und Ende Komma haben.Regex: Komma getrennte ganze Zahlen

ich es geschafft, diese zu finden, aber ich kann nicht undertsand wie die Ziffer Grenze

^\d{1,10}([,]\d{10})*$ 
+0

Beachten Sie, dass '[,]' auf 'äquivalent ist,' und Sie wahrscheinlich schreiben 'gemeint ([,] \ d {1,10}) * 'anstelle von' ([,] \ d {10}) * '. –

Antwort

30

Das, was Sie noch mindestens 1 integer geschrieben erfordert, so dass es nicht eine leere Zeichenfolge übereinstimmen:

Hier ist, was Sie brauchen:

^(\d+(,\d+)*)?$ 

Explaination:

  1. setzen die ganze Sache in Klammern und Ende mit einem '?' so wie die leere Zeichenfolge übereinstimmen.
  2. immer mit einer ganzen Zahl beginnen, so '\d+'. Die 1 oder mehr stelliges Zeichen ('0'-'9')
  3. Dann eine Reihe von Klammern machen, die ein Sternchen, nachdem es ',\d+' und legen enthalten.
    3a. Die Inneneinrichtung beginnt mit einem ',' dann einer Ganzzahl. 3b. Der Stern bedeutet, dass Sie alles innerhalb der Klammer 0 oder mehrmals wiederholen.

Hench die ganze Sache ist either an empty string or start with an integer then repeat zero or more times a string which starts with a comma and ends with an integer

+0

Alle arbeiten, aber ich musste wählen, und zuerst kommen zuerst bedient es, danke :) –

+1

@Metzu, Seien Sie sich bewusst, dass die erste keine leere Zeichenfolge entspricht ... – tster

+0

Dies sollte als die richtige Antwort markiert werden – Spike

3

{1,10} und {10} Bereiche zu entfernen sind. Sie können sie durch + für unendlich-positiv ersetzen. ZB .:

^\d+([,]\d+)*$ 
+2

Methinks, dass Sie auch die eckigen Klammern um das Komma weglassen können. –

+0

Ich denke, du hast Recht. – troelskn

1

Versuchen Sie Folgendes:

^(\d+(,\d+)*)?$ 
+0

Danke dafür :) –