Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzenie pola czy zawiera liczbę
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
xmarko
Witam,
w jaki sposob sprawdzić czy w polu input została wpisana wartość liczbowa.
Tworzę formularz - i muszę w nim sprawdzić przed wysłaniem do skryptu php czy wartośc wpisana w pole "masa" jest liczbą czy tekstem.
Jezeli wystepuje teks - to powinien zostać wywolany komunikat o błędzie (atert).
W zasadzie przydałoby się też sprawdzenie czy do wpisania liczby zastosowano przecinek, czy kropkę . Z założenia powinien być wpisany przecinek.
I daltego Skrypt w javie powinien rozpoznać , jaki znak został zastosowany. W przypadku użycia kropki powinien pojawić się komunikat (alert) o błędzie.
Oto przykładowy kod formularza
  1. <form action="karta.php" method="POST" target="_blank" name="formularz">
  2. <input name='masa' size='5' value =''>
  3. </form>

Zwracam sie z prośbą o pomoc w rozwiązaniu mojego problemu.
Jak powinien wygląfdac zapis sprawdzający te zalożenia?
Niestety java dla mnie to "czarna magia"
Za okazane zrozumienie, sugestie i pomoc z góry bardzo dziekuję.
MStaniszczak
Witam

Masz taką małą funkcyjkę:

Kod
function isNumeric(sText, minus) {
    var ValidChars = "0123456789";
    var IsNumber=true;
    var Char;
    
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if ((i == 0) && (Char == "-") && minus)
            continue;
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}


Pozdrawiam
Marcin Staniszczak
dasko
@MStaniszczak: Funkcja dziurawa. Nie obsługuj przecinków, kropek...

Można to zrobic łatwiej, przy użyciu wyrażeń regularnych... smile.gif

Kod
function check() {
    var reg = /^-?\d+(([,\.]?\d+)|())$/;
    if(reg.test(document.forms['formularz'].masa.value)) {
  return true;
    } else {
  alert("Wpisz wartosc liczbowa!");
  return false;
    }
}


Oczywiście potem należy dodać procedure obsługi zdarzenia onsubmit do formularza:
  1. <form action="karta.php" method="POST" target="_blank" name="formularz" onsubmit="return check();">


Powinno działać... cool.gif
MStaniszczak
Bo jest do integerow (chyba niezgrabnie nazwana;-)
To jest do Floatow;-)

Kod
function isFloat(sText) {
    var ValidChars = "0123456789.,";
    var IsNumber=true;
    var Char;
    
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if ((i == 0) && (Char == "-"))
            continue;
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}


Ale przyznaje - Twoje rozwiązenie jest lepsze - moje przepuszca np 1.1.1 czy 1.2,3... Ja staram sie unikc regexp-ów ze względu na wydajność, ale tu czasem się nie da;-)


Pozdrawiam
Marcin Staniszczak
Vir
Kod
function isNumSpec(n){return/^(\d+[\.,]|)\d+$/.test(n+'')}

Autor:PiotrB.[pl.comp.www]

Niestety Piotr ubiegł mnie - chyba nic lepszego nie da się wymyśleć tongue.gif
Chyba żeby użyć isNaN(), ale wówczas przecinki odpadają...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.