2013-08-16 11 views
13

Po przeprowadzeniu testu programu zdałem sobie sprawę z fakturowania za zarządzanie aplikacją oprogramowania. Zauważyłem następujący błąd: moja tabela w sqlserver zawiera: cenę numeryczną (6,2) użytkownik mojego programu wpisz cenę jako 555,00 jest dobre. ale gdy umieści 555555 to jest błąd, więc muszę określić maskę, w której mantysa jest opcjonalna od 0 do 999, a część dziesiętna jest programowalna 2 lub 3 zgodnie z wyborem użytkownika, używam wtyczki JQuery Masked input i I nie znalazłem dobrego wyrażenia regularnego, proszę, pomóż, pracuję z jsp/servlet.Maska wprowadzania liczbowych i dziesiętnych

+0

Ehm ... jeśli pole bazy danych jest numeryczna (6,2), to liczba miejsc dziesiętnych nie może być „2 lub 3 w zależności do wyboru użytkownika ". czego mi brakuje? –

+0

Tak, zmieniłem go w bazie danych (6,3), dwie cyfry po przecinku lub trzy są tylko opcjonalne na wyświetlaczu. – najeh22

+0

ale problem jest taki sam – najeh22

Odpowiedz

17

Można użyć numerów jquery numeric.
Aktualna wersja zezwala na to, czego szukasz, ale ktoś musi changed kod trochę i to działa:

HTML

<input class="numeric" type="text" /> 

obsługa JavaScript

$(".numeric").numeric({ decimal : ".", negative : false, scale: 3 }); 

To jest całość source.
Przygotowałem to fiddle, dzięki czemu można zobaczyć, jak to działa.

+0

Próbowałem tego http://jsfiddle.net/lun471k/4CHfC/but wyrażenie regularne tutaj:/(\ d {1,14}) (\. \ d {1,3 }) {0,1} $/(regex) to fałsz. Potrzebuję twojej pomocy – najeh22

+0

Potrzebuję tylko wymusić na cyfrach cyfry przed punktem do maxmymalnej liczby 14: 0.000 do 99999999999999.999 – najeh22

+0

kiedy używam precyzji 4, mogę wprowadzić do 9999, co chcę mieć z precyzją 4 to 99,99 – najeh22

0

Teraz, gdy rozumiem lepiej, czego potrzebujesz, oto co proponuję. Dodaj procedurę obsługi klucza do pola tekstowego, która sprawdza zawartość pola tekstowego za pomocą tego wyrażenia regularnego ^[0-9]{1,14}\.[0-9]{2}$, a jeśli nie pasuje, zmień tło na czerwone lub pokaż tekst lub cokolwiek chcesz. Oto kod, aby umieścić w document.ready

$(document).ready(function() { 
    $('selectorForTextbox').bind('keyup', function(e) { 
     if (e.srcElement.value.match(/^[0-9]{1,14}\.[0-9]{2}$/) === null) { 
      $(this).addClass('invalid'); 
     } else { 
      $(this).removeClass('invalid'); 
     } 
    }); 
}); 

Oto JSFiddle tego w działaniu. Wykonaj tę samą stronę serwera regex i jeśli nie pasuje, wymagania nie zostały spełnione. Możesz to również zrobić, sprawdzając zdarzenie onsubmit i nie pozwól użytkownikowi przesłać strony, jeśli wyrażenie regularne nie pasuje.

Powodem niewykonania maski przy wstawianiu tekstu jest to, że bardzo to komplikuje, np. jak już wspomniałem w komentarzu, użytkownik nie może rozpocząć wprowadzania poprawnych danych wejściowych, ponieważ jego początek jest niepoprawny. Jest to możliwe, ale sugeruję to zamiast tego.

+0

/^[0-9]{1,14}\.[0-9]{}+ jest nieprawidłowy, coś jest nie tak, ponieważ mogę wprowadzić tutaj liczby tak bardzo, jak chcę, również litery – najeh22

+0

Używam to ale nie jest prawidłowa funkcja checkDec (el) { var ex =/^ [0-9] {1,3} \. [0-9] {2} $ /; if (ex.test (el.value) == false) { el.value = el.value.substring (0, el.value.length - 1); } } – najeh22

+0

@ najeh22 Możesz wpisać, co chcesz, ale gdy wprowadzony tekst jest nieprawidłowy, tło zmieni kolor na czerwony, to znaczy, że nie wymuszam maski. Trzeba jednak wykonać walidację po stronie serwera, aby regex był dobry do sprawdzania po stronie serwera ORAZ do wstępnego przesłania, jeśli tego potrzebujesz. Jeśli jednak potrzebujesz maski czasu rzeczywistego, która nie pozwala wprowadzić nieprawidłowej wartości, skorzystałbym z rozwiązania LeftyX, ponieważ jest to o wiele bardziej skomplikowane do osiągnięcia (na przykład, musisz pozwolić użytkownikowi wpisać '2.', ale to nie jest poprawna wartość, stąd problemy: – Bikonja

8

jQuery plugin maska ​​wejściowy (6 całych i 2 miejsca po przecinku):

HTML:

<input class="mask" type="text" /> 

jQuery:

$(".mask").inputmask('Regex', {regex: "^[0-9]{1,6}(\\.\\d{1,2})?$"}); 

Mam nadzieję, że to pomoże ktoś

+0

Nice Regex, dziękuję. – Bigyellowbee

3

Ty można to zrobić za pomocą wtyczki jquery inputmask.

HTML:

<input id="price" type="text"> 

Javascript:

$('#price').inputmask({alias: 'numeric', 
         allowMinus: false, 
         digits: 2, 
         max: 999.99});