Avatar billede copeland Nybegynder
04. juni 2001 - 14:10 Der er 10 kommentarer og
1 løsning

Validering af dato

Jeg skal validere et felt hvor brugeren skriver en dato.
Den skal være skrevet/formateret således eks. 24-12-2001 hvordan tjekker jeg at det er skrevet således?

hilsen
anne
Avatar billede perla Nybegynder
04. juni 2001 - 14:12 #1
På www.activeserverpages.dk og www.netcoders.dk findes flere små programmer der laver dato formatering.

-Per
Avatar billede mwittrock Nybegynder
04. juni 2001 - 21:35 #2
Prøv denne funktion:

Function ValiderDato(ByVal strDatoStreng)

  Dim objRegExp

  Set objRegExp = New RegExp

  objRegExp.Pattern = \"^\\d\\d?-\\d\\d?-\\d\\d(\\d\\d)?$\"
 
  ValiderDato = objRegExp.Test(strDatoStreng)

End Function

Den godkender datoer som 1-2-98, 10-11-1999 og 31-1-2001.
Avatar billede copeland Nybegynder
04. juni 2001 - 22:47 #3
>>mwittrock 

Den validere tldels rigtigt....med de godkender også 32-50-2001....og det dur jo ikke!

Hvordan sætter man begræsning på 31 \\ 12 \\ på henholdsvis dag og måned?

Strengen kommer fra ét textfelt som brugeren udfylder.

hilsen
anne
Avatar billede mwittrock Nybegynder
04. juni 2001 - 22:55 #4
Ups, jeg har vist dummet mig... VBScript funktionen IsDate() returnerer True hvis du kalder den med noget, der kan konverteres til en dato, og ellers False. Hvis du _vil_ have en dato på formen dd-mm-yyyy, kan du bruge den funktion jeg skrev, og bagefter kalde IsDate(), for at se om datoen er gyldig. Hvis du blot vil have en gyldig dato, kan du nøjes med at kalde IsDate().
Avatar billede copeland Nybegynder
04. juni 2001 - 23:25 #5
Jeg tror jeg kan kombinere dem....

men skal følgende:

objRegExp.Pattern = \"^\\d\\d?-\\d\\d?-\\d\\d(\\d\\d)?$\"

Ikke være:

objRegExp.Pattern = \"^\\d\\d?-\\m\\m?-\\y\\y(\\y\\y)?$\"

hilsen
anne
Avatar billede mwittrock Nybegynder
04. juni 2001 - 23:31 #6
Nej, \\d er blot en forkortelse for [0-9], dvs. \\d repræsenterer ét tal i det regulære udtryk.

Hvis du vil indbygge IsDate i funktionen, kan du ændre den sidste linie fra:

ValiderDato = objRegExp.Test(strDatoStreng)

til:

ValiderDato = objRegExp.Test(strDatoStreng) And IsDate(strDatoStreng)



Avatar billede copeland Nybegynder
04. juni 2001 - 23:46 #7
Hvordan sikre jeg så at de første to cifre er dag og ikke måned?

IsDate() godkender både 13-12-2001 og 12-13-2001 som en valid dato, men jeg vil jo gerne have den entydigt dd-mm-yyyy

Avatar billede mwittrock Nybegynder
05. juni 2001 - 00:02 #8
Denne funktion fungerer som den ovenstående, men tilføjer at dd skal være mellem 1 og 31, at mm skal være mellem 1 og 12, og at det hele er en gyldig dato:

Function ValiderDato(ByVal strDatoStreng)

  Dim objRegExp, intD, intM

  Set objRegExp = New RegExp

  objRegExp.Pattern = \"^(\\d\\d?)-(\\d\\d?)-\\d\\d(\\d\\d)?$\"
 
  If objRegExp.Test(strDatoStreng) Then
    intD = CInt(objRegExp.Execute(strDatoStreng)(0).SubMatches(0))
    intM = CInt(objRegExp.Execute(strDatoStreng)(0).SubMatches(1))
    ValiderDato = intD >= 1 And intD <= 31 And intM >= 1 And intM <= 12 And IsDate(strDatoStreng)
  Else
    ValiderDato = False
  End If

End Function

Bemærk dog, at den kræver en nylig version af VBScript p.g.a. anvendelsen af SubMatches i det regulære udtryk.
Avatar billede mwittrock Nybegynder
05. juni 2001 - 00:16 #9
Alternativ version der ikke bruger SubMatches:

Function ValiderDato(ByVal strDatoStreng)

  Dim objRegExp, arrDatoParts, intD, intM

  Set objRegExp = New RegExp

  objRegExp.Pattern = \"^(\\d\\d?)-(\\d\\d?)-\\d\\d(\\d\\d)?$\"
 
  If objRegExp.Test(strDatoStreng) Then
    arrDatoParts = Split(objRegExp.Execute(strDatoStreng)(0).Value, \"-\")
    intD = arrDatoParts(0)
    intM = arrDatoParts(1)
    ValiderDato = intD >= 1 And intD <= 31 And intM >= 1 And intM <= 12 And IsDate(strDatoStreng)
  Else
    ValiderDato = False
  End If

End Function
Avatar billede copeland Nybegynder
05. juni 2001 - 00:33 #10
Det virker perfekt......mange 1000 tak

det var lige det jeg ledte efter

hilsen
anne
Avatar billede mwittrock Nybegynder
05. juni 2001 - 00:47 #11
Selv tak, god fornøjelse.
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
Kurser inden for grundlæggende programmering

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