2015-05-26 11 views
6

Utilizzando regex, posso controllare se è decimale o noControllare decimale e la lunghezza totale del numero

^\d*\.?\d*$ 

Ma quello che voglio controllare è la lunghezza totale di quelli cifre.

(^\d*\.?\d*$){1,10} 

Ma non riesco ancora a controllarlo.

dopo 2 giorni più tardi, il mio finale solution è

(?=^\d*\.?\d*$)^.{1,10}$ 

Regular expression visualization

Debuggex Demo

+1

Rimuovere il * 'dopo' \ 'd'. – Maroun

+0

Che motore/lingua stai usando? Questo non sarà facile in una semplice regex con alcuni motori. –

+0

Sto usando C# @ DenysSéguret –

risposta

5

Ecco una soluzione:

^(?!.{10})\d*\.?\d*$ 

Ciò controlla tutto il numero non è più di 10 caratteri.

Se si desidera controllare l'intero numero non è più di 10 cifre (senza contare il punto), si possono utilizzare

^((?!.{11})\d*\.\d*|(?!.{10})\d*)$ 
+0

Seguret, voto +1 per il tuo grande suggerimento, mi aiuta molto. Ma ho ancora domande, se voglio limitare 10 cifre, devo fare '^ (?!. {11}) \ d * \. ? \ d * $ ', se voglio una limitazione di 11 cifre, devo fare' .. {12} .. '. Quindi c'è un altro modo? Grazie mille –

+0

@FrankMyatThu La mia modifica risponde alle tue preoccupazioni? –

2
(^\d*\.?\d*$){1,10} 
    ↑  ↑ 

I * mezzi, zero o più. Quindi la tua regex significa "zero o più volte, da 1 a 10 volte", quindi {1,10} in questo caso è ridondante. Devi rimuovere * o applicare {1,10} solo a parti che non ce l'hanno.

Ad esempio, è possibile modificare la regex per:

^\d*(\.?\d{0,10})$ 

Questo corrisponde ai numeri che ha fino a 10 cifre dopo il punto. Se si desidera far corrispondere un numero float che ha 10 cifre in totale, è possibile utilizzare lookahead negativo (come @ DenysSéguret già menzionati nella sua risposta +1):

(?!.{10})\d*\.?\d* 

Si abbina \d*\.?\d*$ solo se la sua lunghezza < 10 (compreso il punto).

+1

Questo accetta più di 10 lunghezze. – Manwal

+0

@Manwal modificato. – Maroun

Problemi correlati