Avatar billede nythjem Nybegynder
06. marts 2005 - 19:53 Der er 14 kommentarer og
1 løsning

Validering af dato

Hej Alle!

Jeg har et dato felt, som jeg gerne vil lave en validering af.

Dato formatet er følgende: dd-mm-åååå

Hvordan gør jeg det?

<head>

<script type="text/javascript">

function validering1(f){
  if(f.dato01.value==''){
    alert('Datoen skal angives i formatet dd-mm-åååå');
    f.dato01.focus();
    return false;
  }
  return true;
}

</script>

</head>

<form>

<form action="#" name="form1" method="post" onsubmit="return validering1(this)">

input type="text" name="dato01" value="06-03-2005">

</form>
Avatar billede baitianlong Nybegynder
06. marts 2005 - 21:02 #1
noget i denne stil:

function validering1(f){
  if(f.dato01.value==''){
    alert('Datoen skal angives i formatet dd-mm-åååå');
    f.dato01.focus();
    return false;
  }
  var d = f.dato1.value.split("-");
  if(d[2] < 0 || d[2] > 2100) return false;
  if(d[1] < 1 || d[1] > 12) return false;
  mdays = [31,28,31,30,31,30,31,31,30,31,30,31];
  if(d[2] % 400 == 0 || (d[2] % 4 == 0 && d[2] % 100 != 0)) mdays[1] = 29;
  if(d[0] < 0 || d[0] > mdays[d[1]-1]) return false;
  return true;
}

Prøv med den :)
Avatar billede roenving Novice
07. marts 2005 - 11:07 #2
Tjah, der er en helt sikker metode til dato-validering med javascript, nemlig ved hjælp af et Date-objekt !-)

Desuden kan man med fordel bruge en RegExp til at teste formatets validitet, og f.eks. også acceptere / i stedet for - ...

function validering(f){
  var dato = f.dato01.value;
  if(!dato.match(/^\d\d\-\d\d\-\d{4}$/)){
    alert('Datoen skal angives i formatet dd-mm-åååå');
    f.dato01.focus();
    return false;
  }else{
    dato = dato.split("-");
    var d = new Date(dato[2],(+dato[1]-1),dato[0]);
    if(d.getFullYear()!=dato[2]||d.getMonth()+1!=dato[1]||d.getDate()!=dato[0]){
      alert('Datoen skal være gyldig');
      f.dato01.focus();
      return false;
    }
  }
  return true;
}

-- hvis du også skal acceptere slashes, skal du bruge [-\/] i stedet for \- i matchen og /[\/-]/ i stedet for "-" i splitten !-)
Avatar billede nythjem Nybegynder
07. marts 2005 - 11:35 #3
Hej Jesper og Jes.

Tak for svarene :)

Jes, jeg kan rigtig godt lide, at der i din validering er blevet taget højde for, at input 00-00-0000 ikke godkendes som en dato, så du må hjertens gerne ligge et svar :)

Og mange tak for hjælpen..
Avatar billede roenving Novice
07. marts 2005 - 11:51 #4
Jamen, så lægger jeg da et svar !-)

Velbekomme '-)
Avatar billede roenving Novice
07. marts 2005 - 12:38 #5
-- og tak for point ;~}
Avatar billede nythjem Nybegynder
07. marts 2005 - 12:42 #6
Og tak for hjælpen.. Bukker og nejer *Gg*
Avatar billede baitianlong Nybegynder
07. marts 2005 - 20:45 #7
Jesper og Jes ?? :P

Jeg ved ikke om min virker, men hvis den gør, vil den nu heller ikke acceptere 00-00-0000. Den er dog kodet ud af den blå luft, så den virker sikkert ikke :)
Avatar billede nythjem Nybegynder
07. marts 2005 - 21:07 #8
Hedder du ikke Jesper? Roenving hedder jo Jes :)
Avatar billede nythjem Nybegynder
07. marts 2005 - 21:10 #9
Tjek. Jo du gør.

Jeg hader at vi skal kalde hinanden for vores screennames :)

Anyways, god aften..
Avatar billede baitianlong Nybegynder
07. marts 2005 - 21:18 #10
men vi ved ikke hvad du hedder
Avatar billede roenving Novice
08. marts 2005 - 02:16 #11
>>legende.dk

-- tjah, du har jo et par gange peget på, at din mail-adresse netop er jesper (at) ditbrugernavn ...

-- men bemærk dog også, at den type løsning, jeg har lagt, ikke kun er en genering af din løsning, men en, som nogenlunde kan sammenlignes med en Ferrari overfor en indkøbsvogn i et supermarked, fordi:

1. Den først checker, om der faktisk er brugt det rigtige format (og iøvrigt kom jeg også til at angive nogle ekstra brugbare udvidelser til format-checket !-)

2. Derefter checker om det er en faktisk eksisterende dato (og ikke, som din iøvrigt ganske brugbare løsning en sandsynligt eksisterende dato) ...

3. Leverer en brugbar fejlmeddelelse under alle omstændigheder ...

4. Giver en adskilligt mere overskuelig løsning, og bl.a. undgår en hel stribe forskellige checks (som er med til at gøre det svært med den brugbare fejlmeddelelse !-)

5. En del af dette er netop den delvist ukorrekte array af antal måneds-dage, som jo selvfølgelig kræver et par ekstra kodelinjer, hvorfor det faktisk ender med, at jeg har en løsning på færre linjer, som er adskilligt mere præcis, fordi jeg udnytter javascripts indbyggede Date-objekt, som på en rasende simpel måde stiller validering af datoer til rådighed ...

-- og jeg skal selvfølgelig ikke undlade at prale med, at dette Date-objekt endda kan udvides med nogle ganske nyttige funktioner, som jeg har gjort en dyd af at offentliggøre: http://roenving.users.whitehat.dk/date/roenvingDate.html
Avatar billede nythjem Nybegynder
08. marts 2005 - 08:51 #12
Og derfor er du Jes, en helt fantastisk ressource ;-)

Mvh. Michael,

Og hav nu en storslået dag :)
Avatar billede roenving Novice
08. marts 2005 - 13:15 #13
I ganske lige måde !o]
Avatar billede baitianlong Nybegynder
08. marts 2005 - 17:24 #14
Skal du kalde min kode for en indkøbsvogn ?! :O
Avatar billede roenving Novice
08. marts 2005 - 17:56 #15
*lol*

-- jeg skulle lige have et hurtigt ord, og så var indkøbsvognen den eneste, jeg kunne komme på, som kunne transportere ligeså lidt som en Ferrari !-)
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