2013-03-27 14 views
5

Chcę zweryfikować moje pole waluty za pomocą wyrażenia regularnego. Chcę zezwolić na następujące wpisy wzorców:regex dla liczby całkowitej lub liczby zmiennoprzecinkowej z dwoma miejscami dziesiętnymi

1.23 
1 
.45 
0.56 
56.00 

Żaden przecinek nie powinien być dozwolony. Próbowałem już \d+(\.\d\d), ale pozwala tylko na pierwszy, czwarty i piąty wpis. \d+(?:\.\d\d+)? pozwala na wszystkie oprócz trzeciego.

+0

Próbowałeś \ d * (\. \ D *)? – Melanie

+0

Nie. Spróbuję. –

+0

W jaki sposób są to waluty? Widzę tylko pływaki. – Bergi

Odpowiedz

7

Użyj \d* zamiast \d+ przed dziesiętnym, aby dopasować zero lub więcej cyfr. Dodaj również kotwice (^ i $), inaczej przejdą, o ile istnieje jakikolwiek dostępny mecz. Byłoby to również sprawdzić poprawność ciąg pusty, więc w razie potrzeby można użyć uprzedzona do upewnij się, że jest co najmniej jedna cyfra:

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

Twoje rozwiązanie działa dobrze. ale dopuszcza '1.254' i' 23.1'. Chcę pozwolić tylko na dwa miejsca po przecinku. Albo nie będzie miejsca dziesiętnego, czy tylko dwa miejsca po przecinku –

+0

@KrishanuDey, który był dla mnie niejasny; Zaktualizowałem go tak, że '\ d +' jest '\ d \ d' –

+0

@ExplosionPills: That Worked. :) Wielkie dzięki. –

3

Regexes for floating-point numbers są rozwiązane problemu:

\d*\.?\d+ 

Przez co najmniej dwa dziesiętne:

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

Aby uczynić go bardziej zrozumiałym:

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

A dokładnie dwóch miejsc po przecinku:

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

zależności od języka, nie zapomnij anchor wyrażenie tak, że musi dopasować cały ciąg.

Powiązane problemy