2009-08-31 18 views
5

Sto provando a convalidare l'input dell'utente, che è solo numeri separati da virgola. Mi piacerebbe farlo con RegEx, ma non riesco a trovare la giusta espressione.Regex per numero separato da virgola

Occorre convalidare i seguenti stringhe (e più grande):

1 
12 
123 
1,234 
12,345 
123,456 

e invalidare le seguenti stringhe (e pazzo):

1,1 
1,12 
12,1 
12,12 
123,1 
123,1 

Qualsiasi aiuto sarebbe molto apprezzato.

Ecco quello che ho provato finora (EDIT: che non funzionano), insieme a diverse varianti ->

^(((\d{1,3},)*\d{3})|(\d{1,3}))$ 
^(\d{1,3}[,])*\d{3}|\d{1,3}$ 

risposta

14

ne dite di questo:

^\d{1,3}([,]\d{3})*$ 

Fondamentalmente si può avere 1-3 cifre senza virgola. Dopo ciò, hai bisogno di una virgola. Se hai una virgola, è necessario aggiungere a seguito da altre 3 cifre. Quella sequenza di virgola a 3 cifre può apparire un numero qualsiasi di volte.

EDIT: Come ha osservato Andrew Hare, non si cura di ciò che è stato trovato all'interno delle parentesi al di là del fatto che esso abbinato, in modo da poter utilizzare un gruppo non-cattura invece mettendo ?: dopo la parentesi di apertura:

^\d{1,3}(?:[,]\d{3})*$ 
+3

+1 Ben fatto. La mia unica critica: poiché questa espressione regolare è solo per la validazione, è necessario modificare il gruppo di acquisizione in modo che sia un gruppo non di acquisizione. –

+2

Un buon punto, ma mi ha sempre infastidito il fatto che rendere un gruppo non-cattura rendesse l'espressione regex più brutta. –

+0

guardando la regex originale sembra accesa una stringa come 12,1,123 è legale ((\ d {1,3},) * \ d {3}) che sopra non soddisfa –

Problemi correlati