2013-07-05 25 views
5

bisogno di espressioni regolari che hanno: (.) ​​espressione regolare per la convalida prezzo

  1. Massimo 8 cifre prima del punto decimale
  2. Massimo 4 cifre dopo la virgola decimale
  3. punto decimale è facoltativo

massima decimale valido è di 8 cifre decimali prima e 4 cifre dopo decimali Così 99999999,9999

La rexpressione regolare che ho provato ^\ d {0,8} [.]? \ D {1,4} $ non funziona per 123456789 e più di questo. significa che sta prendendo più di 8 cifre se il punto decimale non è disponibile.

provato qui: http://regexpal.com/

Molte grazie in anticipo!

+0

Il prezzo non può essere negativo? –

+0

No, non per il mio caso! – user2338652

risposta

7
^\d{0,8}(\.\d{1,4})?$ 

È possibile effettuare l'intero decimale opzionale

+1

È necessario inserire una barra rovesciata prima del periodo (dot): vale a dire '(. \ \ D {1,4}) ? 'altrimenti stai accettando QUALSIASI carattere tra cui un'altra cifra. –

5

Si può provare questo:

^\d{1,8}(?:\.\d{1,4})?$ 

o

^[1-9]\d{0,7}(?:\.\d{1,4})?$ 

Se non si desidera avere uno zero come prima cifra.

È possibile consentire questo se si vuole: (.1234)

^[1-9]\d{0,7}(?:\.\d{1,4})?|\.\d{1,4}$ 
+0

Grazie per la tua risposta super veloce! Vedo che sta fallendo per .12345678 Si dovrebbe prendere solo .1234. – user2338652

+0

@ user2338652 se si prevede che il valore di essere massimo 4 cifre dopo point..you decimale non dovrebbe accettare l'ingresso se maggiore di 4..that potrebbe portare a ** ** arrotondamento errors..just ** dont't * * accetta l'input se non corrisponde ai tuoi criteri .. e ** valiadation! = match ** – Anirudha

+0

@ user2338652 FYI, la risposta che hai accettato anche "fallisce" su '.123456789'. –

3

Ogni quanto sopra non ha funzionato per me. Solo questo funziona per me

^([0-9]{0,2}((.)[0-9]{0,2}))$ 
Problemi correlati