Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

javascript validera nummer

Håller på att göra en kalkylator i html och javascript, får fan inte skiten att validera att det är nummer som anges!

<!doctype html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="stil.css"> <title>kalkylator</title> <script> function checkNum(){ var n = document.kalk.disp.value; if(isNaN(n) == true){ alert("Endast siffror!"); }else{ kalk.disp.value=eval("kalk.disp.value"); } } </script> </head> <body> form name="kalk"> <input type="text" name="disp" > <br> <input type="button" value="7" OnClick="kalk.disp.value+='7'"> <input type="button" value="8" OnClick="kalk.disp.value+='8'"> <input type="button" value="9" OnClick="kalk.disp.value+='9'"> <input type="button" value="*" OnClick="kalk.disp.value+='*'"> <br> <input type="button" value="4" OnClick="kalk.disp.value+='4'"> <input type="button" value="5" OnClick="kalk.disp.value+='5'"> <input type="button" value="6" OnClick="kalk.disp.value+='6'"> <input type="button" value="-" OnClick="kalk.disp.value+='-'"> <br> <input type="button" value="1" OnClick="kalk.disp.value+='1'"> <input type="button" value="2" OnClick="kalk.disp.value+='2'"> <input type="button" value="3" OnClick="kalk.disp.value+='3'"> <input type="button" value="+" OnClick="kalk.disp.value+='+'"> <br> <input type="button" value="C" OnClick="kalk.disp.value=''"> <input type="button" value="0" OnClick="kalk.disp.value+='0'"> <input type="button" value="." OnClick="kalk.disp.value+='.'"> <input type="button" value="=" OnClick="checkNum()" > </form> </body> </html>

function svar ger själva svaret av kalkylatorn och function validate ska alltså validera att det är siffror som är angivna när man klickar på = knappen. Har provat massa olika varianter av validate men får det inte att fungera...

edit: ändrade till min nuvarande kod

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Registrerad
Okt 2011

Först och främst: regexp är sällan svaret.

Kan du inte använda isNan() ?

Trädvy Permalänk
Medlem
Registrerad
Maj 2012

Du har deklarerat metoden med två parametrar men skickar inte in några med räkna-knappen.
Var längesen jag jobbade med JavaScript så minns inte om det automatiskt kommer med några till funktionen.
med ditt regexp validerar du vara siffrorna 0-9 men inte punkten för decimaltal.

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
Skrivet av Hubbee:

Först och främst: regexp är sällan svaret.

Kan du inte använda isNan() ?

Joo jag har provat isnan men får fan inte till det, är helt novis på js haha första scriptor jag ger mig på

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
Skrivet av Pake:

Du har deklarerat metoden med två parametrar men skickar inte in några med räkna-knappen.
Var längesen jag jobbade med JavaScript så minns inte om det automatiskt kommer med några till funktionen.
med ditt regexp validerar du vara siffrorna 0-9 men inte punkten för decimaltal.

Hehe okej, jag famlar lite i mörkret här har provat isnan på lite olika sätt men jag får inte till det som jag vill

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

Jag får tusan inte till detta med isnan! är det nån kunnig som skulle kunna förklara lite för mig hur jag kan gå tillväga?

Detta är väl det närmaste jag kommit att få det at fungera

<script> function checkNum(){ var n = document.kalk.disp.value; if(isNaN(n) == true){ alert("Your entry is not a number"); }else{ kalk.disp.value=eval(kalk.disp.value); } } </script>

Får dock bara alert oavsett vilken input jag har

det verkar vara + - * tecknen som ställer till med problem nu för mig

det går bra om jag skriver exempelvis -2 men om jag skriver 2-2 så får jag alerten

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Registrerad
Okt 2011
Skrivet av pellski87:

Jag får tusan inte till detta med isnan! är det nån kunnig som skulle kunna förklara lite för mig hur jag kan gå tillväga?

Detta är väl det närmaste jag kommit att få det at fungera

<script> function checkNum(){ var n = document.kalk.disp.value; if(isNaN(n) == true){ alert("Your entry is not a number"); }else{ kalk.disp.value=eval(kalk.disp.value); } } </script>

Får dock bara alert oavsett vilken input jag har

det verkar vara + - * tecknen som ställer till med problem nu för mig

det går bra om jag skriver exempelvis -2 men om jag skriver 2-2 så får jag alerten

Ja, då fungerar det ju som förväntat. Du får klura ut hur du ska hantera fallet när det inte är ett tal enligt "2-2" eller liknande.

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
Skrivet av Hubbee:

Ja, då fungerar det ju som förväntat. Du får klura ut hur du ska hantera fallet när det inte är ett tal enligt "2-2" eller liknande.

Löste det med regexp efter många om och men haha

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

<script> function checkNum() { var x = document.kalk.disp.value; if (x.match(/[a-zA-Z]+/)) { kalk.disp.value=("Endast siffror!"); kalk.disp.style.background = "red"; } else { kalk.disp.value = eval(x); (eval.value===0) kalk.disp.style.background = "green"; (eval.value>=1) kalk.disp.style.background = "blue"; (eval.value<=-1) kalk.disp.style.background = "red"; } } </script>

<form name="kalk"> <input type="text" name="disp" > <br> <input type="button" value="7" OnClick="kalk.disp.value+='7'"> <input type="button" value="8" OnClick="kalk.disp.value+='8'"> <input type="button" value="9" OnClick="kalk.disp.value+='9'"> <input type="button" value="*" OnClick="kalk.disp.value+='*'"> <br> <input type="button" value="4" OnClick="kalk.disp.value+='4'"> <input type="button" value="5" OnClick="kalk.disp.value+='5'"> <input type="button" value="6" OnClick="kalk.disp.value+='6'"> <input type="button" value="-" OnClick="kalk.disp.value+='-'"> <br> <input type="button" value="1" OnClick="kalk.disp.value+='1'"> <input type="button" value="2" OnClick="kalk.disp.value+='2'"> <input type="button" value="3" OnClick="kalk.disp.value+='3'"> <input type="button" value="+" OnClick="kalk.disp.value+='+'"> <br> <input type="button" value="C" OnClick="kalk.disp.value=''"> <input type="button" value="0" OnClick="kalk.disp.value+='0'"> <input type="button" value="." OnClick="kalk.disp.value+='.'"> <input type="button" value="=" OnClick="checkNum()" > </form>

försöker få min kalkylator att ändra färg i "displayen" beroende på resultat... har prövat lite olika vägar men detta är närmaste jag kommit, blir bara röd oavsett resultat hur får jag den att separera resultaten och ge rätt bakgrund lättast?

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2004

det är förmodligen värdet i kalk.disp.value du vill kolla och inte eval.value.

as far as we can tell, the massacre went well...