Avatar billede rebel_penguin Nybegynder
29. januar 2004 - 11:23 Der 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
            }
        }


Nogle forslag / ideer

mvh rebel_penguin
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 12:02 #1
<script>

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
    }

</script>


<form>
<input type=text name=Dato onKeyUp="doValidateIt(this)">
</form>
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 12:08 #2
Den hevde jeg lige på lager! :o)

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.
Avatar billede rebel_penguin Nybegynder
05. februar 2004 - 10:47 #3
ok takker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester