![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 23.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Chcę stworzyć input, który na bieżąco będzie sprawdzał, co użytkownik wpisuje do pola input i pozwoli mu tylko na wpisanie liczby w postaci ułamka dziesiętnego. Czyli ogólnie - dowolna ilość cyfr i tylko jedna kropka po drodze. Udało mi się znaleźć na forum wyrażenie regularne, które mi w tym pomogło, ale udało mi się uzyskać tylko funkcję, która pozwala na wpisywanie dowolnej ilości liczb oraz kropek... Co zrobić, żeby działało to poprawnie?
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kod if (!document.form.cena_n.value.match(/^(\d+)?([\.]|\d+)?$/)) document.form.cena_n.value=document.form.cena_n.value.replace(/(?:[^0-9]*)$/,""); document.form.cena_n.value=document.form.cena_n.value.replace(/(?:[^0-9]*)([0-9]*)(\.{1})([0-9]*)(?:[^0-9]*)/,"$1$2$3"); } W swoim warunku co prawda wyrażenie nie pasuje do wpisanego ciągu, ale każesz zamieniać wszystko prócz wszystkich znaków i wszystkich kropek. Pierwsza dodana zamiana jest potrzebna z tego względu, że zamienia na ciąg pusty wszystkie nieprawidłowe znaki wpisane na początku inputa (nie udało mi się tego osiągnąć w jednym replace'ie. Druga zamienia w ten sposób, że pobiera cyfry przed kropką, pierwszą kropkę i cyfry po kropce wpisuje je do zmiennych $1-$3, a olewa wszystkie inne; wystarczyło więc zastąpić cały wpisany tekst tylko tymi pobranymi poprawnymi wartościami. Problem jest tylko jeden - jeśli się wpisze dwie kropki pod rząd to usuwa obie. Ale jeśli nie będą pod rząd zostawi tą pierwszą. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 23.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję - działa, tak jak napisałeś
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Napisałaś.
Z którym dokładnie? Z tym pierwszym który przepuszczał dużo kropek czy z tym moim usuwającym dwie kropki pod rząd? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 23.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Napisałaś. Przepraszam, nie zorientowałem się po nicku ![]() Z którym dokładnie? Z tym pierwszym który przepuszczał dużo kropek czy z tym moim usuwającym dwie kropki pod rząd? W pierwszym. W tym o którym napisałaś "W swoim warunku co prawda wyrażenie nie pasuje do wpisanego ciągu..". Czyli ogólnie w tym kodzie, który podałem na początku. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok. Ogólnie chodzi o to, że ten if
Kod if (!document.form.cena_n.value.match(/^(\d+)?([.]|\d+)?$/)) Faktycznie "powie" że wyrażenie z wieloma kropkami jest nieprawidłowe, więc wykona się następna linijka, także tutaj wszystko jest poprawne.Ale trzeba przeanalizować tą kolejną linijkę właśnie, bo to ona przepuszcza więcej kropek niż jedną. Kod document.form.cena_n.value=document.form.cena_n.value.replace(/[^0-9.]/,""); To zotaje wywołane jak już było powiedziane w momencie, gdy w input zostaje wpisana więcej niż jedna kropka lub jakikolwiek inny znak niż cyfra. Jednak sama składnia wyrażenia każe zamieniać wszystkie znaki inne niż kropki i cyfry 0-9. Składnia [^0-9.] nie ogranicza liczby kropek do jednej, ale mówi: pobierz znaki inne od każdej cyfry i KAŻDEJ kropki jaką napotkasz w inpucie i je zamień na "nic". Ten post edytował Shili 20.06.2008, 11:47:56 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 02:58 |