2009-09-14 17 views
6

Esiste un'espressione regolare che convalida un valore percentuale a 2 cifre decimali?Come convalidare una percentuale con due cifre decimali con un Regex?

Ho un'espressione regolare per due cifre decimali, ma non so come arrestare valori superiori a 100. ad es. 100.01 è convalidato con la mia regex.

+1

FWIW - analizza l'immagine in virgola mobile/doppia in qualsiasi lingua utilizzata e convalida '0 <= x <= 100'. Una regex non è il martello giusto per questo chiodo IMHO. –

+0

Quando ho detto "immagine", intendevo "percentuale". Scusate. –

+0

Sto utilizzando un'espressione regolare di datannotation per applicare la convalida in un'app mvc. – littlechris

risposta

9

In Perl:

/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1, ? 2})) $/

oppure si può semplicemente aggiungere un extra se si confrontano 100 esattamente :)

+1

Ben fatto. Funziona con i miei casi di test ... http://regexhero.net/tester/?id=6807190b-cc82-4dd4-8864-05ce8c0c3b4f –

+0

Sembra che funzioni sul link fornito, ma può farlo funzionare nella mia app . Vlaidazione ASP.Net MVC mediante annotazione dati: [Espressione regolare (@ "/ (^ 100 ([.] 0 {1,2})?) $ | (^ \ D {1,2} ([.] \ D {1,2})?) $/")] – littlechris

+0

Yo può refactoring questo per efficienza migliore. Le due parti prima e dopo il | condividi un prefisso e un suffisso iniziali e include^e $. Rendendo comuni le parti comuni, si riduce la quantità di backtracking necessaria quando una parte non riesce a corrispondere. – MSalters

0

provare questo:

\d{1,2}\.\d{2} 

che ti dà una cifra una cifra o due numero seguito da esatto Sono due cifre decimali. Se si desidera consentire decimi così (ala 10.1) quindi provare questo:

\d{1,2}\.\d{1,2} 
+0

Ho sempre odiato il 100%. ;) –

+1

Questa soluzione manca il valore '100' o '100.00'. –

+0

Durr, ho continuato a leggere che l'OP NON voleva 100,00. Oh beh, forse un'altra volta ... –

0

/^(?:100(?:.0(?:0)?)?|\d{1,2} (:?. \ d {1,2})) $/

Compatibile con:?

  • 100,0
  • 100,00
  • 99,99
  • 0,01

ecc

0

Provate questo (accetta nulla tra 0 e 100 tra cui 0,00 & 100.00:

^(100\.00|100\.0|100)|([0-9]{1,2}){0,1}(\.[0-9]{1,2}){0,1}$ 
1

In questo modo tutte le percentuali, tranne zero.

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

Dovresti aggiungere^100 $ invece dei 100 alla fine della tua espressione, altrimenti qualsiasi cosa contenente 100 è considerata valida per es. 100s.23 – Fjut

Problemi correlati