2013-03-27 16 views
5

Voglio convalidare il mio campo di valuta con espressioni regolari. Voglio consentire le seguenti voci di modelloregex per numero intero o numero a virgola mobile con due decimali

1.23 
1 
.45 
0.56 
56.00 

Nessuna virgola deve essere consentita. Ho provato \d+(\.\d\d) ma consente solo la prima, la quarta e la quinta. \d+(?:\.\d\d+)? consente tutto tranne il terzo.

+0

Hai provato \ d * (\. \ D *)? – Melanie

+0

No. Fammi provare. –

+0

Come vanno le valute? Vedo solo galleggianti. – Bergi

risposta

7

Utilizzare \d* anziché \d+ prima del decimale per corrispondere a zero o più cifre. Aggiunga anche ancore (^ e $) altrimenti passerà finchè c'è qualche partita disponibile. Ciò consentirebbe anche validare una stringa vuota, quindi, se necessario, è possibile utilizzare un lookahead per assicurarsi che ci sia almeno una cifra:

^(?=.*\d)\d*(?:\.\d\d)?$ 
+0

La tua soluzione funziona bene. ma permette '1.254' e' 23.1'. Voglio consentire solo due cifre decimali. O non ci sarà nessun decimale o solo due decimali –

+0

@KrishanuDey che non mi è chiaro; L'ho aggiornato in modo che '\ d +' è '\ d \ d' –

+0

@ExplosionPills: ha funzionato. :) Molte grazie. –

3

Regexes for floating-point numbers sono un problema risolto:

\d*\.?\d+ 

Per almeno due decimali:

(\d*\.\d)?\d+ 

Per rendere più comprensibile:

\d+|\d*\.\d{2,} 

E per esattamente due decimali:

\d+|\d*\.\d{2} 

A seconda della lingua, non dimenticate di anchor l'espressione in modo che esso deve corrispondere l'intera stringa.

Problemi correlati