2011-10-30 22 views
6

Ho una casella di testo, può avere valori come 1 o 1,2 o 1,225,345,21 cioè valori multipli. Ma ora voglio convalidare questo input.RegEx per la convalida JavaScript di numeri separati da virgola

toString().match(/^(([0-9](,)?)*)+$/) 

Questo è il codice che sto usando. Si sta convalidando corretta solo, ma un problema quando l'utente immettere i valori in questo modo:

inputval:1,22,34,25,645(true) 
inputval:1,22,34,25,645,(falues) 

Quando l'utente immette una virgola (,) come ultima dovrebbe generare un errore.

Qualcuno può aiutarmi per favore?

risposta

21

Basta inserire manualmente almeno una:

/^[0-9]+(,[0-9]+)*$/ 
2

varianti sul Regex del Ariel :-)

/^(([0-9]+)(,(?=[0-9]))?)+$/ 

Il , deve essere seguita da una cifra (?=[0-9]).

O

/^(([0-9]+)(,(?!$))?)+$/ 

Il , non deve essere seguita dalla fine della stringa (?!$).

/^(?!,)(,?[0-9]+)+$/ 

verifichiamo che il primo carattere non è un ,(?!,) e poi abbiamo messo opzionale , prima che le cifre. È opzionale perché il primo blocco di cifre non ne ha bisogno.

+0

Devo eliminare completamente il pattern '(x + y?) +' - conduce facilmente a [backtracking catastrofico] (http://www.regular-expressions.info/catastrophic.html). – Kobi

+0

@Kobi Come sempre, quello che puoi fare e quello che dovresti fare con le espressioni rege sono abbastanza diversi :-) – xanatos

Problemi correlati