javascript, vad har jag missat?

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

javascript, vad har jag missat?

var as = /^[0-9]{6}[-+][0-9]{4}$/; var pn=document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month >= 12 || day >= 30) { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } }

Får inte riktigt detta att fungera, vad är det jag missar?!

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
SweClockers forum
Registrerad
Aug 2012

Vad fungerar inte? Vad får du för felmeddelande? Det första jag såg var följande:
1. Ditt regex ser inte rätt ut. Vad tänker du dig att [-+] gör? Vill du inte bara ha ett -?
2. Vissa månader har 31 dagar.
3. Din kod är oerhört inkonsekvent. Bestäm dig för hur du vill sätta måsvingar och håll dig till det viset. Samma sak med mellanslag vid variabeltilldelning.
4. Använd [code][/code]-taggar för att bibehålla kodens indentering.

Guide: Roota din HTC - BB-Kod-knappar på Prisjakt

              Min burk - Kvävekyld till 80%
Phenom II X4 965@3900MHz (Sommarklock)
GTX 760@1111MHz

Ibland har jag fel, men då är det någon annans fel.

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

Vad fungerar inte? Vad får du för felmeddelande? Det första jag såg var följande:
1. Ditt regex ser inte rätt ut. Vad tänker du dig att [-+] gör? Vill du inte bara ha ett -?
2. Vissa månader har 31 dagar.
3. Din kod är oerhört inkonsekvent. Bestäm dig för hur du vill sätta måsvingar och håll dig till det viset. Samma sak med mellanslag vid variabeltilldelning.
4. Använd [code][/code]-taggar för att bibehålla kodens indentering.

Den säger inte ifrån om jag skiter i att fylla i nånting i inputen och samma om jag bara skriver nå random bokstäver.
Det är för att kolla att - är inkluderat, vill att inputen ska vara ex 761214-8888, jo jag vet att vissa månader har 31 dagar, försöker lära mig javascript och iom det göra ett lättare validerings script för en form, har fastnat på personnr...

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
SweClockers forum
Registrerad
Aug 2012
Skrivet av pellski87:

Den säger inte ifrån om jag skiter i att fylla i nånting i inputen och samma om jag bara skriver nå random bokstäver.
Det är för att kolla att - är inkluderat, vill att inputen ska vara ex 761214-8888, jo jag vet att vissa månader har 31 dagar, försöker lära mig javascript och iom det göra ett lättare validerings script för en form, har fastnat på personnr...

Lägg till ett else-statement med felmeddelande på din yttre if-sats. Som det är nu har du om det här stämmer, gör det här och saknar i annat fall, gör så här.

Guide: Roota din HTC - BB-Kod-knappar på Prisjakt

              Min burk - Kvävekyld till 80%
Phenom II X4 965@3900MHz (Sommarklock)
GTX 760@1111MHz

Ibland har jag fel, men då är det någon annans fel.

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

Lägg till ett else-statement med felmeddelande på din yttre if-sats. Som det är nu har du om det här stämmer, gör det här och saknar i annat fall, gör så här.

Okej, förstår ungefär hur du menar, men ändå inte... har du något exempel på hur jag kan göra? är som sagt egentligen helt novis på detta kör i princip bara på trial and error

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
Vid datorn
Registrerad
Aug 2006

Tror @LemonIllusion menar typ såhär

var as = /^[0-9]{6}[-+][0-9]{4}$/; var pn=document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month >= 12 || day >= 30) { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } else{ alert("Uppgiften mottogs korrekt"); kontakt.pnr.style.background = "green"; return true; } }

In the end what separates a man from a slave?
Money? Power? No... A man chooses, a slave obeys.
ASUS Z170M-PLUS || Intel Core i7 6700k @ 4,7GHz || 64GB 2133MHz Corsair RAM || EVGA NVIDIA GTX 1080 8GB @ 2,0Ghz || Bifenix Prodigy M || 2x CZ TR150 480GB RAID 0 || EK-CoolStream PE 120 & 240, Radiatorer || EK-DDC 3.2 PWM, Pump || EK-Supremacy MX & EK-FC1080 GTX, Vattenblock || 3x BenQ 24", Skärmar

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

Tror @LemonIllusion menar typ såhär

var as = /^[0-9]{6}[-+][0-9]{4}$/; var pn=document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month >= 12 || day >= 30) { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } else{ alert("Uppgiften mottogs korrekt"); kontakt.pnr.style.background = "green"; return true; } }

Joo förstod det var någe sånt men får det inte att displaya error om jag inte fyller i

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
SweClockers forum
Registrerad
Aug 2012
Skrivet av pellski87:

Okej, förstår ungefär hur du menar, men ändå inte... har du något exempel på hur jag kan göra? är som sagt egentligen helt novis på detta kör i princip bara på trial and error

var as = /^[0-9]{6}-[0-9]{4}$/; var pn = document.forms.kontakt.pnr.value; if (as.test(pn)) { // Om pn matchar regex var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month >= 12 || day >= 30) { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } } else { // Om pn inte matchar regex // Ge error }

Guide: Roota din HTC - BB-Kod-knappar på Prisjakt

              Min burk - Kvävekyld till 80%
Phenom II X4 965@3900MHz (Sommarklock)
GTX 760@1111MHz

Ibland har jag fel, men då är det någon annans fel.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av pellski87:

var as = /^[0-9]{6}[-+][0-9]{4}$/; var pn=document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month >= 12 || day >= 30) { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } }

Får inte riktigt detta att fungera, vad är det jag missar?!

Får man inte vara född den 30:e eller senare, eller i december..?

Bilanaloger är som Volvo — varenda svenne kör med dem

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

var as = /^[0-9]{6}[-+][0-9]{4}$/; var pn=document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month <= 13 && day <= 32) { return true; } } else { alert ("Fyll i korrekt personnummer xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } }

det där fungerar i princip, förutom att den släpper igenom att jag skriver ex 914752-2222 dvs över månad 12 och dag 31 vad är det nu jag missar?!

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
i din garderob
Registrerad
Sep 2007
Skrivet av pellski87:

if (month <= 13 && day <= 32)

det där fungerar i princip, förutom att den släpper igenom att jag skriver ex 914752-2222 dvs över månad 12 och dag 31 vad är det nu jag missar?!

If-satsen som jag lämnade kvar säger: om (månad är-mindre-eller-likamed 13 OCH dag är-mindre-eller-likamed 32). Det är inte helt rätt.

Det större problemet är att du har nästlat dina if-satser på ett underligt sätt vilket är lite svårt att se pga hur du indenterat din kod. Först kontrolleras om strängen matchar din regex, och om den inte gör det visas en alert. Om regexet matchar så testar du månad/dag enligt ovanstående, men du har inte lagt till en else-sats för att visa ett fel ifall värdena är för stora.

Har du förresten tänkt på att vissa månader har mindre än 30 dagar?

Bilanaloger är som Volvo — varenda svenne kör med dem

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

If-satsen som jag lämnade kvar säger: om (månad är-mindre-eller-likamed 13 OCH dag är-mindre-eller-likamed 32). Det är inte helt rätt.

Det större problemet är att du har nästlat dina if-satser på ett underligt sätt vilket är lite svårt att se pga hur du indenterat din kod. Först kontrolleras om strängen matchar din regex, och om den inte gör det visas en alert. Om regexet matchar så testar du månad/dag enligt ovanstående, men du har inte lagt till en else-sats för att visa ett fel ifall värdena är för stora.

Har du förresten tänkt på att vissa månader har mindre än 30 dagar?

okej, men jag har satt att om 13 eller mindre månad och 32 eller mindre dag return true annars ska alert visas? förstår att koden kan vara knepig att läsa och avig då jag är helt novis på det här

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
Aug 2011

if (!as.test(pn) { return;}

Som teknocide nämner, så kan du testa regex först (och lägg till eventuell notifiering till användaren) så slipper du nesta nästkommande if loop, sedan kan du utgå ifrån att användaren har fyllt i giltig data och efterkommande kod körs bara i det fallet.

Trädvy Permalänk
Medlem
Plats
Helsingfors
Registrerad
Jun 2004

var as = /^[0-9]{6}-[0-9]{4}$/; //nån får kontrollera ifall detta stämmer var pn = document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month > 12 || day > 31) { alert ("Fyll i korrekt personnummer"); //regex matchar, men ogiltiga siffror kontakt.pnr.style.background = "red"; return false; } else { return true; //regex matchar, giltiga siffror, allt är korrent. } } else { alert ("Fyll i personnummer i formatet xxxxxx-xxxx"); //regex matchar inte kontakt.pnr.style.background = "red"; return false; }

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

var as = /^[0-9]{6}-[0-9]{4}$/; //nån får kontrollera ifall detta stämmer var pn = document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month > 12 || day > 31) { alert ("Fyll i korrekt personnummer"); //regex matchar, men ogiltiga siffror kontakt.pnr.style.background = "red"; return false; } else { return true; //regex matchar, giltiga siffror, allt är korrent. } } else { alert ("Fyll i personnummer i formatet xxxxxx-xxxx"); //regex matchar inte kontakt.pnr.style.background = "red"; return false; }

det där fungerar helt enligt hur jag vill ha det men vad är det som avgör vilken alert som visas om du förstår hur jag menar? ex om jag fyller i bokstäver så visas det första annars det andra?

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
Helsingfors
Registrerad
Jun 2004
Skrivet av pellski87:

det där fungerar helt enligt hur jag vill ha det men vad är det som avgör vilken alert som visas om du förstår hur jag menar? ex om jag fyller i bokstäver så visas det första annars det andra?

Står som komment efter varje alert hur man har kommit dit.

Trädvy Permalänk
Medlem
Plats
Helsingfors
Registrerad
Jun 2004

Om du använder 4-siffrigt år:

if ( month>12 || day>31 || ((month<7&&month%2==0)||(month>8&&month%2==1))&&day>30 || (month==2 && (day>29 || ((year%4||!(year%100))&&year%400 && day>28))) )

Om 2-siffrigt år, antar att 00 är 2000:

if ( month>12 || day>31 || ((month<7&&month%2==0)||(month>8&&month%2==1))&&day>30 || (month==2 && (day>29 || (year%4 && day>28))) )

Använd på egen risk, kan ha missat nån siffra här och en parentes där.

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

<script> function validateform() { //scriptet för att validera namn börjar här. var n = document.forms.kontakt.namn.value; var ns = /^[A-Za-z ]{4,24}$/; if (n.match(ns) ) { return true; } else { alert("Fyll i ett korrekt namn!"); kontakt.namn.style.background = "red"; return false; } //scriptet för att validera email börjar här var x = document.forms.kontakt.email.value; var atpos=x.indexOf("@"); var dotpos=x.lastIndexOf("."); if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.lenght || x==null || x=="") { alert("Fyll i en korrekt E-post adress"); kontakt.email.style.background = "red"; return false; } //Här börjar scriptet för personnummer var as = /^[0-9]{6}-[0-9]{4}$/; var pn = document.forms.kontakt.pnr.value; if (as.test(pn)) { var year = pn.substr(0,2); var month = pn.substr(2,2); var day = pn.substr(4,2); if (month > 12 || day > 31) { alert("Fyll i korrekt personnummer"); kontakt.pnr.style.background = "red"; return false; } else { return true; } } else { alert("Fyll i personnummer i formatet xxxxxx-xxxx"); kontakt.pnr.style.background = "red"; return false; } var an = /^[0-9]{5}$/; var a = document.forms.kontakt.posnr.value; if (!a.match(an) ) { alert("Fyll i ett korrekt postnummer!"); kontakt.posnr.style.background = "Red"; return false; } var eo = /^[0-9]/;r var e = document.forms.kontakt.ort.value; if (e==null || e=="" || e.match(eo) ) { alert("Fyll i ort!"); kontakt.ort.style.background = "red"; return false; } } </script>

Så här långt har jag kommit med mitt script, men måste ha gjort nå fel nu för efter att jag lägger in ett korrekt namn enligt kriterierna så blir resten automatiskt validerat även fast dom saknar värde... har jag missat nån klammer eller dylikt?

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

Om du använder 4-siffrigt år:

if ( month>12 || day>31 || ((month<7&&month%2==0)||(month>8&&month%2==1))&&day>30 || (month==2 && (day>29 || ((year%4||!(year%100))&&year%400 && day>28))) )

Om 2-siffrigt år, antar att 00 är 2000:

if ( month>12 || day>31 || ((month<7&&month%2==0)||(month>8&&month%2==1))&&day>30 || (month==2 && (day>29 || (year%4 && day>28))) )

Använd på egen risk, kan ha missat nån siffra här och en parentes där.

snajsigt ska kolla in det när jag får ordning på hela scriptet

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
i din garderob
Registrerad
Sep 2007

Att validera personnummer är rätt krångligt faktiskt. Datumet måste stämma; 880231-1234 är fel eftersom det inte finns något 31 februari. Sista siffran är en kontrollsiffra som räknas fram enligt en formel; om den inte stämmer överens med resultatet av formeln är personnumret inte heller korrekt.

Nedanstående kod når ganska långt (den validerar kontrollsiffran och att datumet är ok) men vissa specialfall tas inte i åtanke.

function isValidPersonnummer(str) { var pattern = /^(\d\d)(\d\d)(\d\d)[+-](\d\d\d)(\d)$/, data = pattern.test(str) && createObject( ['year', 'month', 'day', 'födelsenummer', 'checksum'], str.match(pattern).splice(1) ), isoDate = '19' + [data.year, data.month, data.day].join('-') return data && isValidIsoDate(isoDate) && validateChecksum(data) function createObject(keys, values) { var i, res = {} for (i=0; i<keys.length; i++) { res[keys[i]] = values[i] } return res } function isValidIsoDate(str) { var pattern = /\d{4}-\d{2}-\d{2}/, date = new Date(str) return !isNaN(date) && date.toISOString().substring(0, 10) === str } function validateChecksum(data) { var numbers = data.year + data.month + data.day + data.födelsenummer function calc(rest, m) { var product = parseInt(rest[0]) * (m % 2 + 1), value = Math.floor(product / 10) + product % 10 return rest.length && calc(rest.splice(1), m + 1) + value } return 10 - calc(numbers.split(''), 1) % 10 === parseInt(data.checksum) } }

Dold text

Bilanaloger är som Volvo — varenda svenne kör med dem

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

Att validera personnummer är rätt krångligt faktiskt. Datumet måste stämma; 880231-1234 är fel eftersom det inte finns något 31 februari. Sista siffran är en kontrollsiffra som räknas fram enligt en formel; om den inte stämmer överens med resultatet av formeln är personnumret inte heller korrekt.

Nedanstående kod når ganska långt (den validerar kontrollsiffran och att datumet är ok) men vissa specialfall tas inte i åtanke.

function isValidPersonnummer(str) { var pattern = /^(\d\d)(\d\d)(\d\d)[+-](\d\d\d)(\d)$/, data = pattern.test(str) && createObject( ['year', 'month', 'day', 'födelsenummer', 'checksum'], str.match(pattern).splice(1) ), isoDate = '19' + [data.year, data.month, data.day].join('-') return data && isValidIsoDate(isoDate) && validateChecksum(data) function createObject(keys, values) { var i, res = {} for (i=0; i<keys.length; i++) { res[keys[i]] = values[i] } return res } function isValidIsoDate(str) { var pattern = /\d{4}-\d{2}-\d{2}/, date = new Date(str) return !isNaN(date) && date.toISOString().substring(0, 10) === str } function validateChecksum(data) { var numbers = data.year + data.month + data.day + data.födelsenummer function calc(rest, m) { var product = parseInt(rest[0]) * (m % 2 + 1), value = Math.floor(product / 10) + product % 10 return rest.length && calc(rest.splice(1), m + 1) + value } return 10 - calc(numbers.split(''), 1) % 10 === parseInt(data.checksum) } }

Dold text

Oooh tusen tack kan du kolla mitt förgående inlägg? jag fattar verkligen inte vart felet sitter?! kollat med jslint men får inga error...

finns det nått sätt att köra script och kolla vars felet sitter? för efter jag skriver in ett korrekt namn så skiter det i att validera dom andra inputarna

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

Fundera på vad som händer när namnet är "valid". Vad gör return?

Skrivet av pellski87:

if (n.match(ns)) { return true; // <---- här alltså. }

Så här långt har jag kommit med mitt script, men måste ha gjort nå fel nu för efter att jag lägger in ett korrekt namn enligt kriterierna så blir resten automatiskt validerat även fast dom saknar värde... har jag missat nån klammer eller dylikt?

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

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

Fundera på vad som händer när namnet är "valid". Vad gör return?

Tack ;> men vad ska man ha istället för return true; ? funkar då jag tar bort det men inte om jag tar bort måsvingarna för den strängen

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

Måsvingarna symboliserar ju ett sammanhängande block av kod. Tar man bort måsvingarna och man har exempelvis en if, så får man ett implicit kodblock som består av raden (eller snarare uttrycket) som följer direkt efter if-satsen.

ex:

if (x == y) { console.log("Explicit kodblock"); } if (x == y) console.log("Implicit kodblock som hör till raden ovanför"); if (x == y) console.log("Implicit kodblock på samma rad");

Om du tar bort både "return" och måsvingarna, så kommer koden att tolkas som att else skall köras om if är sant. Detta går inte rent logiskt och kommer därför att resultera i ett fel.

if (x == y) else { // <-- Detta kommer alltså tolkas som att "else" skall köras om if är sant. => Computer says "No". }

För att återgå till ditt egentliga problem, så kanske det är enklast att du använder en variabel för att hålla reda på om du påträffat något fel eller inte.

Pseudokod:

var hasError = false; if (namn inte är valid) { hasError = true; // Annat stuff... } if (personnummer inte är valid) { hasError = true; // Annat stuff... } // Osv för dina andra fält. if (hasError) { // Något är fel, meddela användaren. } else { // Gör något som skall göras om allt är ok (kanske return?) }

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

Trädvy Permalänk
Medlem
Registrerad
Dec 2008

Antingen validerar du dem sekventiellt och ger fel på första felaktiga input och fortsätter validera nästa gång man skickar formuläret. Det kan vara struligt för användaren om det är mycket fel. Så ofta kollar du alla och sparar undan vilka som är fel och returnerar sist.

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

Måsvingarna symboliserar ju ett sammanhängande block av kod. Tar man bort måsvingarna och man har exempelvis en if, så får man ett implicit kodblock som består av raden (eller snarare uttrycket) som följer direkt efter if-satsen.

ex:

if (x == y) { console.log("Explicit kodblock"); } if (x == y) console.log("Implicit kodblock som hör till raden ovanför"); if (x == y) console.log("Implicit kodblock på samma rad");

Om du tar bort både "return" och måsvingarna, så kommer koden att tolkas som att else skall köras om if är sant. Detta går inte rent logiskt och kommer därför att resultera i ett fel.

if (x == y) else { // <-- Detta kommer alltså tolkas som att "else" skall köras om if är sant. => Computer says "No". }

För att återgå till ditt egentliga problem, så kanske det är enklast att du använder en variabel för att hålla reda på om du påträffat något fel eller inte.

Pseudokod:

var hasError = false; if (namn inte är valid) { hasError = true; // Annat stuff... } if (personnummer inte är valid) { hasError = true; // Annat stuff... } // Osv för dina andra fält. if (hasError) { // Något är fel, meddela användaren. } else { // Gör något som skall göras om allt är ok (kanske return?) }

Skrivet av jocke92:

Antingen validerar du dem sekventiellt och ger fel på första felaktiga input och fortsätter validera nästa gång man skickar formuläret. Det kan vara struligt för användaren om det är mycket fel. Så ofta kollar du alla och sparar undan vilka som är fel och returnerar sist.

Thanks for shedding some light försöker lära mig det här, alltid kul att träffa på folk som är villiga att förklara lite!

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