2013-04-22 11 views
8

Potrzebuję regex do sprawdzenia poprawności liczby, która może zawierać tysiąc separatorów lub dziesiętnych za pomocą javascript. maksymalnej wartości będące 9,999,999.99 Min wartość 0.01 Inne ważne wartości: 11,111 11.1 1,111.11Regex dla liczby z liczbą dziesiętną i separatorem tysięcznym

Wartości nieprawidłowe: 1111 1111,11 ,111 111,

Rozglądałem całym bez radości.

Odpowiedz

13
/^\d{1,3}(,\d{3})*(\.\d+)?$/ 

O wartości minimalne i maksymalne ... Cóż, nie będę robić z regex, ale można dodać lookaheads na początku:

/^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$/ 

Uwaga: W ten sposób 0,999.00, więc możesz go zmienić na:

/^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/ 

który nie pozwoliłby wiodącą 0.

Edit:
Testy: http://jsfiddle.net/pKsYq/2/

+0

Dzięki za szybką odpowiedź Loamhoof Bez radości. Nazywam to w ten sposób i nie działa: var re = new RegExp ("/ (?! 0 + \. 00) (?!. {10,} \.) (?! 0,? \ D) \ d {1,3} (, \ d {3}) * \. \ d +/"); jeśli (! Min.match (re)) { alert ("Brak dopasowania"); } – Swifty

+0

@ Czy potrafisz podać przykład tego, co się nie udaje? – Loamhoof

+0

Używam tej strony, aby ją przetestować: [Test wyrażeń regularnych] (http://www.regular-expressions.info/javascriptexample.html) Jeśli wpisuję "1", to się nie powiedzie. – Swifty

1
((\d){1,3})+([,][\d]{3})*([.](\d)*)? 

To działało na kilka, ale wciąż się uczę regex, jak również.

Logika powinna składać się z 1-3 cyfr 0-1 razy, 1 przecinka, po którym następują 3 cyfry dowolna liczba razy i pojedyncza. następnie dowolną liczbę cyfr 0-1 razy

+0

Nie ma tam żadnej radości, Munch. – Swifty

+0

Czy możesz podać przypadki niepowodzenia? – munch1324

+0

edytowane, powinno być + zamiast? dla pierwszego podwyrażenia. – munch1324

0

Użyłem poniżej regrex dla następujących retrictions -

^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$ 
  1. Nie dopuszczać 0 i .00.
  2. "(tysiąc seperatorów) po 3 cyfrach.
  3. "." (dziesiętnie do 2 miejsc po przecinku).
Powiązane problemy