Forum dyskusyjne poświęcone zagadnieniom związanym z językami JavaScript, VBScript i podobnym
7 października 2003, o 23:08
Witam ponownie.
Pytanko.
Jak dokonać sprawdzenia czy w formularzu zostały wprowadzone cyfry a nie np litery
Proszę o podpowiedź
8 października 2003, o 21:31
Musiałbyś dokładniej sprecyzować problem. Czy chodzi Ci o sprawdzenie, czy podana została LICZBA? (dobre będzie np. '1234' lub '12.34'). Czy chodzi Ci o sprawdzenie, czy podane zostały same cyfry? (dobre będzie np. '1234'). Czy chodzi Ci o sprawdzenie czy NIE podana została żadna litera? (dobre będzie np. '1234' lub '12 34' lub '1-23-4')
Co do podpowiedzi, to problem sprowadza się do przeszukania łańcucha znaków odczytanego z właściwości value danego pola (bo value zawsze zwraca łańcuch, nawet jeśli składa się on z samych cyfr). W zależności od żądanego efektu trzeba przeszukać go na obecność lub nieobecność określonych znaków. Zapewne najłatwiej będzie wykorzystać wyrażenia regularne. Np. (zakładając, że zmienna sValue zawiera sprawdzany łańcuch):
sValue.search(/[^0-9]/);
- zwróci wartość -1 (minus jeden) jeśli NIE znajdzie w łańcuchu jakiegokolwiek znaku innego niż cyfra. Czyli: -1 jeśli łańcuch składa się tylko z cyfr lub jest pusty.
sValue.search(/[a-zA-Z]/);
- zwróci wartość -1 jeśli NIE znajdzie w łańcuchu jakiejkolwiek litery. Czyli: -1 jeśli łańcuch składa się z cyfr lub znaków "nieliterowych" lub jest pusty. Uwaga: nie reaguje na polskie litery!
Z wyrażeń regularnych można budować znacznie bardziej skomplikowane warunki, ale może to Ci na razie wystarczy. Rzecz dotyczy MSIE i języka JScript (nie wiem czy nie ma tu jakichś różnic w stosunku do Java Scriptu, ale chyba nie).
Pozdrawiam
Paweł Rajewski
11 października 2003, o 00:43
13 października 2003, o 19:04
Czyli rozumiem, że ma to być liczba całkowita dodatnia? Konkretna realizacja może być różna w zależności od budowy formularza i tego co jeszcze i kiedy ma być w nim sprawdzane. Najlepiej chyba napisać funkcję, która sprawdzałaby cały formularz przed wysłaniem. Poniżej próbka związana tylko z jednym polem "sztuk":
Funkcja JScript w sekcji HEAD:
function fSprawdz(oForm) {
var sPSV=oForm.elements['sztuk'].value;
var oRegExp=/[^0-9]/;
if (sPSV==''||oRegExp.test(sPSV)) {
window.alert('Zła wartość w polu SZTUK');
return false;
};
};
Formularz w sekcji BODY:
<FORM ID="formularz" onsubmit="return fSprawdz(this);">
Podaj ilość sztuk:<BR>
<INPUT TYPE="TEXT" NAME="sztuk">
<INPUT TYPE="SUBMIT" VALUE="Wyślij">
</FORM>
Tuż przed wysłaniem formularza (onsubmit) wywoływana jest funkcja fSprawdz i przekazywany do niej obiekt-formularz (this). Funkcja odczytuje wartość pola "sztuk" i podstawia pod zmienną sPSV. Druga "zmienna" oRegExp jest wyrażeniem regularnym opisującym znaki, które będą szukane - w tym przypadku dowolne znaki inne niż cyfry.
Następuje sprawdzenie:
1. Czy łańcuch sPSV jest pusty?
...jeśli nie, to...
2. Czy łańcuch sPSV zawiera jakiś znak opisany wyrażeniem regularnym?
Jeśli któryś z warunków jest prawdziwy, następuje wyświetlenie alertu i powrót z funkcji z wartością false. Wartość ta jest następnie zwracana przez zdarzenie onsubmit co powoduje anulowanie wysyłania.
Jeśli w polu "sztuk" są same cyfry, funkcja fSprawdz nie zwraca żadnej wartości i wysyłanie jest kontynuowane. Oczywiście funkcję można rozbudować o sprawdzenie innych pól formularza.
Jest wystarczająco dokładnie?
Pozdrawiam
Paweł Rajewski
13 października 2003, o 20:52
Biję pokłony nad wiedzą twą.
Wszytko działa prawidłowo i nawet rozumiem dlaczego.
Wielkie dzięki.
13 października 2003, o 22:23
14 października 2003, o 20:32
16 października 2003, o 06:45
16 października 2003, o 21:15
19 października 2003, o 15:47
Wielkie dzięki WYDRA
Dla moich potrzeb działa rewelacyjnie.
Pozdrawiam.
10 stycznia 2005, o 21:43
11 stycznia 2005, o 10:29
czesc
sprecyzuje troche moj problem:
Wasza funkcja pozwala wpisac do pola formularza dowolny
znak, i sprawdza czy nie jest to litera dopiero w momecie
wysylanie formu.
Ja chcialbym zeby pole bylo jakby zablokowane dla liter,
zeby mozna bylo wpisac tylko cyfry
Jak ktos ma jakis pomysl to bardzo prosze o pomoc.
pozdrawiam i dziekuje
[/quote]
11 stycznia 2005, o 20:44
Witam!
Do sprawdzenia czy wartość wpisana jest nie liczbą jest funkcja isNaN(). Np:
if(isNaN(document.twoj_formularz.pole_do_spr.value))
alert("To nie jest liczba !");
Wpisz to do funkcji sptrawdzającej formularz przed wysłaniem lub pod zdarzenie OnChange i masz alerta kiedy wpiszesz literę lub inną nie-liczbę
.
Pozdro, Oscar
11 stycznia 2005, o 23:02
12 stycznia 2005, o 18:47
witam !!
udalo mi sie wkoncu dojsc do celu!!
a kod przesylam bo moze sie komus przyda:
function CzyCyfra(e)
{
var jakiZnak = (navigator.appName == "Netscape") ? e.which : e.keyCode;
status = jakiZnak;
if(jakiZnak > 31 && (jakiZnak < 48 || jakiZnak > 57))//sprawdzam czy cyfra
{
if(jakiZnak == 188)//tu sprawdzam czy to przecinek
{
return true;
}
return false;
}
return true;
}
<input onKeyDown="return CzyCyfra(event)" type="text">
pozdrawiem
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.