16. marts 2002 - 01:09Der er
30 kommentarer og 1 løsning
Validering af form + submit knap
Hej Jeg er ved at lave en formular som skal valideres. der er 4 funktioner. Er der nogle der ved hvordan jeg får dem alle startet ved at trykke på submit ????
<!-- Begin function namecheck() { var str = document.myform.name.value; if (str == "") { alert("\nNavne feltet er blankt.\n\nSkriv venligst dit navn.") document.myform.name.focus(); return false; } for (var i = 0; i < str.length; i++) { var ch = str.substring(i, i + 1); if (((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && ch != ' ') { alert("\n Navne feltet accepterer kun bogstaver & mellemrum."); document.myform.name.select(); document.myform.name.focus(); return false; } } return true; }
function emailCheck (emailStr) {
/* Det følgende bliver brugt til at checke om den skrevne e-mail addresse passer med user@domain formatet. den bliver også brugt til at seperere username fra domain. */
var emailPat=/^(.+)@(.+)$/
/* De følgende strenge representerer mønsteret for at matche alle special tegn. Vi vil ikke tillade speciale tegn i addressen. Disse tegn inkluderer ( ) < > @ , ; : \ " . [ ] */ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]" /* Den følgende streng representerer den mængde karakterer der er tilladt i et username eller domainname. Den fortæller faktisk hvilke karakterer der ikke er tilladt. */ var validChars="\[^\\s" + specialChars + "\]" /* Det følgende mønster godkendes hvis "user" strengen er er omgivet af anførselstegn (ellers er der ingen regler for hvilke tegn der er tilladt og hvilke der ikke er; alt kommer med). F.eks "jiminy cricket"@disney.com er en lovlig e-mail adresse. */ var quotedUser="(\"[^\"]*\")" /* Det følgende godkender domains som er IP adresser, modsat symbolske navne. f.eks. joe@[123.124.233.4] er en gyldig e-mail adresse. NOTE: De kantede parenteser er nødvendige. */ var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ /* Den følgende streng representerer et "atom" (faktisk en serie af ikke-speciale tegn.) */ var atom=validChars + '+' /* Den følgende streng representerer et ord i det typiske "username". F.eks, i john.doe@somewhere.com, john og doe er ord. Et ord er enten et "atom" eller en "quoted" streng. */ var word="(" + atom + "|" + quotedUser + ")" // Følgende kode beskriver strukturen af brugeren var userPat=new RegExp("^" + word + "(\\." + word + ")*$") /* Det følgende kode beskriver strukturen af et normalt symbolsk domain, modsat ipDomainkoden, ovenover. */ var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$") /* Til sidst, skal vi prøve at finde ud af om den givede adresse er gyldig. */ /* Begynd med den grove kode til at opdele user@domain i forskellige stykker som er lette at analysere. */ var matchArray=emailStr.match(emailPat) if (matchArray==null) { /* For mange/få @'er eller noget; Faktisk, passer denne e-mail adresse ikke med de generalle typer af gyldige e-mail adresser. */ alert("Email adressen er ugyldig (check @ og .'er)") return false } var user=matchArray[1] var domain=matchArray[2] // Se om "user" er gyldig if (user.match(userPat)==null) { alert("Email: Dit brugernavn er ikke gyldig.") return false } /* hvis e-mail adressen er på en IP adresse (en modsætning til et symbolsk "host name") vær sikker på at IP adressen er gyldig. */ var IPArray=domain.match(ipDomainPat) if (IPArray!=null) { // Dette er en IP adresse for (var i=1;i<=4;i++) { if (IPArray[i]>255) { alert("Email: IP adressens Destination er ugyldig!") return false } } return true } // Domain er et symbolisk navn var domainArray=domain.match(domainPat) if (domainArray==null) { alert("Email: Dit domain navn er ikke gyldigt.") return false } /* domain navn ser ud til at være gyldig, men vær sikker på at det ender med et tre-tegns ord (så som com, edu, gov) eller et to-tegns ord, som representerer land (dk, uk, nl), og at der er et "hostname" der representerer dette domain eller land. */ /* Nu er vi nødt til at opdele "domain" for at få et tal på hvor mange "atoms" det indeholder. */ var atomPat=new RegExp(atom,"g") var domArr=domain.match(atomPat) var len=domArr.length if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) { // adressen skal ende i et to-tegns eller tre-tegns ord. alert("Email-Adressen skal ende i et 3-tegns domain, eller 2-tegns land.") return false } // Vær sikker på at hostname indeholder domain. if (len<2) { var errStr="Denne Email-adresse mangler et hostname!" alert(errStr) return false }
return true; }
function bdaycheck() { w1 = document.myform.bday.value;
document.myform.bday.focus(); switch (wdato) { case 1: alert("Fejl i dag"); return false; case 2: alert("Fejl i måned"); return false; case 3: alert("Fejl i år"); return false; } return true; } function datecheck (dd,mm,yy,fmt,sep) {
var dfmt = fmt; if (fmt && (!(fmt == "YMD" || fmt == "DMY" || fmt == "MDY"))) dfmt = "YMD"; // pt default format
if (! (mm >= 1 && mm <= 12)) return 2; // ugyldig måned
leap = 31; if (mm == 4 || mm == 6 || mm == 9 || mm == 11) leap = 30;
if (! (yy >= 1900 && yy <= 2100)) return 3; // ugyldigt år
if (dfmt == "YMD") normdato = yy + sep + mm + sep + dd; if (dfmt == "DMY") normdato = dd + sep + mm + sep + yy; if (dfmt == "MDY") normdato = mm + sep + dd + sep + yy;
return normdato; }
function phonecheck() { v1 = document.myform.phone.value; if (v1.length < 4) { alert("For få cifre i telefonnummer.\nKrav om mindst 4!"); document.myform.phone.focus(); return false; }
function bingo(); { if (!emailcheck()) return false; if (!bdaycheck()) return false; if (!phonecheck()) return false; if (!namecheck()) return false; return true; } // End --> </script>
Forøvrigt er koden til din emailCheck funktion smask forkert. De afviser "endelser" på 4 tegn, men man kan jo sagtens hedder cc@cc.name eller uu@uu.info
Nå, antallet. Jamen linien if (!emailcheck()) return false; ?
Jeg kan se der er en del flere fejl. Du vil se dem med det samme i en ordentlig browser.
Hvordan tror du folk kan regne ud hvordan de skal skrive deres fødselsdag? "16. marts 2002" giver en fejl, men jeg ville da godt nok blive fornærmet og at få en af de fejlbeskedder i hovedet.
Et generelt godt råd er ikke at checke mere end højst nødvendigt. For en emailadresse ville jeg fx checke der var en @ - ikke mere. Jeg kan jo alligevel ikke checke den er korrekt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.