29. januar 2004 - 11:23Der er
2 kommentarer og 1 løsning
Dato validering
Hej experts m.m.
Har et dato felt hvor brugerne skal indtaste nogle datoer i formattet MM-DD-YYYY.
Indtil videre tester jeg for om dette format umiddelbart er overholdt - men er der nogle der ved hvordan man kan udvide søgningen til også at teste om datoen er valid.
Problemet er at lige nu kan man indtaste 30-06-1978 hvilket helst skal undgås, da 30 senere bliver brugt som måned.
Har indtil videre lavet følgende der som sagt tester primitivt på om formattet er overholdt -jeg vil bare gerne også have validering med?
if (document.forms[0].BirthDate.value.length > 0){ RegData = /\d{2}\-\d{2}\-\d{4}/i if (!RegData.exec(document.forms[0].BirthDate.value)){ alert ("Data format not valid. Must be MM-DD-YYYY") return false } }
function doValidateIt(f){ //sætter Jan 2000 ind hvis datoen er ufuldstændig, //så der dannes en streng i formen (d)d-(m)m-yyyy; var tempArr = f.value.split("-") var strDate = tempArr[0] var strMonth = (tempArr.length > 1) ? ((tempArr[1] == "" || tempArr[1] == "0") ? "1" : tempArr[1]) : "1" var strYear = (tempArr.length > 2) ? ((tempArr[2].length < 4) ? "2000" : tempArr[2]) : "2000"
//den fremkomne dato checkkes; var isValid = (doTestDato(strDate + "-" + strMonth + "-" + strYear))
//Lidt oprydning: Der må ikke være "--" i strengen, og der må ikke være tre "-": var isValid = (isValid && f.value.indexOf("--") == -1 && tempArr.length < 4)
if (!isValid) f.value = f.value.substring(0, f.value.length - 1) }
function doTestDato(str){ var validDato = true if (/^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$/.test(str) == false){ validDato = false }else{ var tempArr = str.split("-") var d = new Date(tempArr[2] + "/" + tempArr[1] + "/" + tempArr[0]) if (d.getDate() != tempArr[0] || d.getMonth() != tempArr[1] - 1) validDato = false } return validDato }
Den checkker datoen ved at fremstille et Date-objekt udfra strengen, og derefter henter den dag, måned og år ud af objektet. Hvis datoen ikke er valid, fx 31/2, så vil den dato men "hælder ind" ikke være den samme som den man "trækker ud":
var tempArr = str.split("-") var d = new Date(tempArr[2] + "/" + tempArr[1] + "/" + tempArr[0]) if (d.getDate() != tempArr[0] || d.getMonth() != tempArr[1] - 1) validDato = false
- og så kan du selv bestemme om den skal erstatte textboxens indhold som den gør nu, eller om du blot vil lave en alert.
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.