Avatar billede bigo Nybegynder
08. august 2006 - 17:19 Der er 12 kommentarer og
2 løsninger

valider klokken

Hejsa.

Jeg har et input felt hvor man kan skrive klokken ind. f.eks. 07.45
Jeg vil gerne kunne validere at det er en valid tid (at det er tal evt. med et tegn i mellem) og at det kun er

00 - 23 i timer
00, 15,30 og 45 i minutter

nogen der kan hjælpe?
Avatar billede or.han Nybegynder
08. august 2006 - 18:11 #1
window.onload = function(){
    var form = document.getElementById("form_navn");
    form.onsubmit = function(){
        var input = document.getElementById("input_felt");
        var input_array = input.value.split(".");
        if(input.value.indexOf(".") != 0 && input_array.length == 2){
            var timer = input_array[0];
            if(timer.length == 2 && typeof parseInt(timer) == "number"){
                timer = parseInt(timer);
                if(timer>=0 && timer<=23){
                    var minutter = input_array[1];
                    if(minutter.length == 2 && typeof parseInt(minutter) == "number"){
                        minutter = parseInt(minutter);
                        if(minutter>=0 && minutter<=60){
                            if(minutter%15==0){
                                alert("Felt valideret");
                                return true;
                            } else {
                                alert("Minutterne er ikke ikke angivet med et interval på 15 minutter");
                                return false;
                            }
                        } else {
                            alert("Minutterne ligger ikke i intervallet 0 - 60");
                            return false;
                        }
                    } else {
                        alert("Minutternes længde er for lang eller er der indtastet bogstaver i feltet");
                        return false;
                    }
                } else {
                    alert("Timerne ligger ikke i intervallet 00 - 23");
                    return false;
                }
            } else {
                alert("Timernes længde er for lang eller er der indtastet bogstaver i feltet");
                return false;
            }
        }
    }
}
Avatar billede or.han Nybegynder
08. august 2006 - 18:31 #2
Har ik lige testet men tror den er god nok...
Du skal angive formularens navn der hvor der står form_navn og angive dit input felts navn der hvor der står input_felt. (Faktisk er det jo ikke deres navn/name men deres id jeg mener)

Gem det ovenstående i en .js fil og så skal du bare i din <head> indsætte:
<script type="text/javascript" src="jsfil.js"></script>
Avatar billede or.han Nybegynder
08. august 2006 - 18:37 #3
window.onload = function(){
    var form = document.getElementById("form_navn");
    form.onsubmit = function(){
        var input = document.getElementById("input_felt");
        var input_array = input.value.split(".");
        if(input.value.indexOf(".") != 0 && input_array.length == 2){
            var timer = input_array[0];
            if(timer.length == 2 && typeof parseInt(timer) == "number"){
                timer = parseInt(timer);
                if(timer>=0 && timer<=23){
                    var minutter = input_array[1];
                    if(minutter.length == 2 && typeof parseInt(minutter) == "number"){
                        minutter = parseInt(minutter);
                        if(minutter>=0 && minutter<=60){
                            if(minutter%15==0){
                                alert("Felt valideret");
                                return true;
                            } else {
                                alert("Minutterne er ikke ikke angivet med et interval på 15 minutter");
                                return false;
                            }
                        } else {
                            alert("Minutterne ligger ikke i intervallet 0 - 60");
                            return false;
                        }
                    } else {
                        alert("Minutternes længde er for lang eller er der indtastet bogstaver i feltet");
                        return false;
                    }
                } else {
                    alert("Timerne ligger ikke i intervallet 00 - 23");
                    return false;
                }
            } else {
                alert("Timernes længde er for lang eller er der indtastet bogstaver i feltet");
                return false;
            }
        } else {
            alert("Der mangler et punktum eller der forekommer flere punktummer");
            return false;
        }
    }
}


Med en lille ændring...
Avatar billede bigo Nybegynder
08. august 2006 - 18:52 #4
1: kan man lave det så det er ligeglad om det er et punktum, streg eller kolon (el. lign) og så bare erstatte det indtastede med et :

2: kan man få den til at runde op/ned til det nærmest kvarter automatisk?
Avatar billede roenving Novice
08. august 2006 - 19:39 #5
1. Ved at erstatte split-karakteren med en regexp:

var input_array = input.value.split(/[.-:,]/);

2. Jeps, selvfølgelig:

                      ...
                        minutter = parseInt(minutter);
                        if(minutter>=0 && minutter<=60){
                            minutter = minutter%15*15;
                            input.value = timer + ":" + minutter;
                        } else {
                      ...
Avatar billede bigo Nybegynder
08. august 2006 - 20:16 #6
hmm.. den siger at der mangler et punktum eller er for mange.

    var form = document.getElementById("thing");
    function check_start_time()
    {
        var input = document.getElementById("b_start_time");
        var input_array = input.value.split(/[.-:,]/);

        if(input.value.indexOf(".") != 0 && input_array.length == 2){
            var timer = input_array[0];
            if(timer.length == 2 && typeof parseInt(timer) == "number"){
                timer = parseInt(timer);
                if(timer>=0 && timer<=23){
                    var minutter = input_array[1];
                    if(minutter.length == 2 && typeof parseInt(minutter) == "number"){
                        minutter = parseInt(minutter);
                        if(minutter>=0 && minutter<=60){
                            minutter = minutter%15*15;
                            input.value = timer + ":" + minutter;
                              if(minutter%15==0){
                                alert("Felt valideret");
                                return true;
                            } else {
                                alert("Minutterne er ikke ikke angivet med et interval på 15 minutter");
                                return false;
                            }
                        } else {
                            alert("Minutterne ligger ikke i intervallet 0 - 60");
                            return false;
                        }
                    } else {
                        alert("Minutternes længde er for lang eller er der indtastet bogstaver i feltet");
                        return false;
                    }
                } else {
                    alert("Timerne ligger ikke i intervallet 00 - 23");
                    return false;
                }
            } else {
                alert("Timernes længde er for lang eller er der indtastet bogstaver i feltet");
                return false;
            }
        } else {
            alert("Der mangler et punktum eller der forekommer flere punktummer");
            return false;
        }
    }


kaldes ved :

<input type=text size=5 maxlength=5 name=b_start_time onblur='check_start_time();'>

og jeg skriver f.eks.: 07.31 i inputfeltet..
Avatar billede bigo Nybegynder
08. august 2006 - 20:42 #7
jeg kom til at tænke på noget escape.. så jeg escapede tegnene:
var data_field_array = data_field.value.split(/[\.\-\:\,]/);

Nu retter den rimeligt til (fra 31 min. til 15) men hvis jeg går tilbage i feltet og retter 7.15 til 08.44 bliver resultatet 0:210 ?!
Avatar billede bigo Nybegynder
08. august 2006 - 21:11 #8
hvad laver den der %15*15 egentlig.. nogen der ved det?
Avatar billede bigo Nybegynder
09. august 2006 - 10:48 #9
dividerede med 15, rundede op og gangede med 15. done deal..;-)

Smid lige et svar så points kan skydes af..
Avatar billede or.han Nybegynder
09. august 2006 - 16:59 #10
Hvem??
Avatar billede bigo Nybegynder
10. august 2006 - 07:45 #11
Jer begge. I gav begge ting der fik ting til at fungere.
Avatar billede or.han Nybegynder
10. august 2006 - 15:06 #12
Okey.
Avatar billede roenving Novice
10. august 2006 - 15:39 #13
Oki '-)
Avatar billede roenving Novice
17. august 2006 - 17:00 #14
-- og tak for point ;~}
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