Strona 1 z 2

Tylko cyfry w formularzu

PostNapisane: 7 października 2003, o 23:08
przez lewar
Witam ponownie.

Pytanko.

Jak dokonać sprawdzenia czy w formularzu zostały wprowadzone cyfry a nie np litery :?:

Proszę o podpowiedź

PostNapisane: 8 października 2003, o 21:31
przez Wydra707
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

PostNapisane: 11 października 2003, o 00:43
przez lewar

PostNapisane: 13 października 2003, o 19:04
przez Wydra707
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

PostNapisane: 13 października 2003, o 20:52
przez lewar
:shock: Biję pokłony nad wiedzą twą. :shock:

Wszytko działa prawidłowo i nawet rozumiem dlaczego.

Wielkie dzięki. :D

PostNapisane: 13 października 2003, o 22:23
przez lewar

PostNapisane: 14 października 2003, o 20:32
przez Wydra707

PostNapisane: 16 października 2003, o 06:45
przez lewar

PostNapisane: 16 października 2003, o 21:15
przez Wydra707

PostNapisane: 19 października 2003, o 15:47
przez lewar
Wielkie dzięki WYDRA :lol:

Dla moich potrzeb działa rewelacyjnie. :!:

Pozdrawiam.

blokada pola formularza przed literami!!

PostNapisane: 10 stycznia 2005, o 21:43
przez bakaj

PostNapisane: 11 stycznia 2005, o 10:29
przez bakaj
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 :lol:
[/quote]

PostNapisane: 11 stycznia 2005, o 20:44
przez oscar
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

PostNapisane: 11 stycznia 2005, o 23:02
przez bakaj

PostNapisane: 12 stycznia 2005, o 18:47
przez bakaj
witam !!

udalo mi sie wkoncu dojsc do celu!! :D

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 :!: