2010-05-27 13 views
9

Sto tentando di creare un'espressione regolare che accetti: Una stringa vuota, un singolo intero o più numeri separati da una virgola ma non può avere una virgola iniziale e finale.Regex: numeri interi delimitati da virgola

sono riuscito a trovare questo, ma non posso undertsand come rimuovere il limite di cifre

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

Si noti che '[,]' è equivalente a ',' e probabilmente intendeva scrivere '([,] \ d {1,10}) * 'invece di' ([,] \ d {10}) * '. –

risposta

30

La cosa che hai postato ancora richiede almeno 1 intero, in modo da non corrispondere una stringa vuota:

Ecco quello che vi serve:

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

analitico:

  1. messo l'intera cosa tra parentesi e alla fine con un '?' così come per abbinare la stringa vuota.
  2. iniziano sempre con un numero intero, così '\d+'. Cioè 1 o più caratteri numerici ('0'-'9')
  3. poi fare una serie di parentesi che contiene ',\d+' e porre asterisco dopo.
    3a. L'interno significa iniziare con un "," quindi un intero. 3b. L'asterisco significa ripetere tutto all'interno della parentesi 0 o più volte.

Hench il tutto è 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

Tutto lavoro ma ho dovuto sceglierne uno, e primo arrivato primo servito lo abbiamo preso, grazie :) –

+1

@Metzu, essere consapevoli che il primo non corrisponde a una stringa vuota ... – tster

+0

Questo dovrebbe essere contrassegnato come la risposta corretta – Spike

3

{1,10} e {10} sono gamme. È possibile sostituirli con + per infinito-positivo. Ad esempio .:

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

Methinks che puoi anche omettere le parentesi quadre attorno alla virgola. –

+0

Mi pare che tu abbia ragione. – troelskn

1

provare quanto segue:

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

Grazie per quello :) –

Problemi correlati