Avatar billede zaknafein Praktikant
22. oktober 2003 - 14:45 Der er 19 kommentarer og
1 løsning

validering af dato ååååmmdd

Er der nogen der har en regexp til validering af dato i følgende format.
validering af dato ååååmmdd
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 14:50 #1
Det kommer an på hvor meget du vil have  /^\d{8}$/  siger om der
er præcis 8 cifre.
Avatar billede zaknafein Praktikant
22. oktober 2003 - 14:52 #2
når ja selvfælgelig.
den skal begrænse så dag er under 31 om måned under 12.
Den behøver ikke validere om der 31 dage i bestemt nåned osv.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 14:54 #3
Så vil jeg anbefale at du piller åååå mm og dd ud, og i dit bagvedliggende
sprog checker om det ser fornuftigt ud - måske er der en indbygget funktion
til det.  Du kan så blot  /^(\d\d\d\d)(\d\d)(\d\d)$/

Regulære udtryk er fine til at genkende strukturer, men hvad en dato reelt
betyder bør man klare andetsteds.
Avatar billede zaknafein Praktikant
22. oktober 2003 - 15:02 #4
Jeg har mit normale javascript på 400  linier der tager sig af at lave en fuldstændig validering og erstatter alle tænkeligt tegn med -  osv, men nu skal jeg bruge et forholdsvis simpelt regexp.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:03 #5
Mit er simpelt. Udvid det med lidt if-sætninger, og du er kørende.
Avatar billede soreno Praktikant
22. oktober 2003 - 15:05 #6
Denne:
([0-9]{4})((0[0-9]{1})|(1)[0-2]{1})(((0|1|2)[0-9]{1})|(3)[0-1]{1})

giver:
20020101 - true
20021010 - true
20021230 - true
20021313 - false
20022020 - false
20021032 - false
Avatar billede zaknafein Praktikant
22. oktober 2003 - 15:06 #7
Ja så er vi ved at være der...

Jeg har nemlig temelig lidt tid inden det skal på, så derfor ville jeg ikke lave det selv.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:07 #8
20020231 - true  ;) Det er ikke det spørgeren ønsker at checke for i dag,
men en dag vil han måske alligevel, og så dur et regulært udtryk ikke (det
skulle i hvert fald blive megastort).

Skal det ikke lige reduceres lidt, Søren?
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:08 #9
20020000 - true ... hovsa
Avatar billede soreno Praktikant
22. oktober 2003 - 15:11 #10
Men, hvis spørger ønsker et regulært udtryk så kan mit bruges.

Jeg er enig i at det var bedre at bruge programmeringssprogets faciliteter til den slags.

Jeg foretrækker ikke at reducere det - jeg synes det er mest læsbart på den form.
(Men du skal da være velkommen.. :-)

([0-9]{4})((0[0-9]{1})|(1)[0-2]{1})(((0[1-9]{1})|(1|2)[0-9]{1})|(3)[0-1]{1})

20020000 - false
Avatar billede soreno Praktikant
22. oktober 2003 - 15:12 #11
Men Erik har en pointe.

Den fejl kan være svær at se i et regulært udtryk.
Langt nemmere at spotte i alm. kode.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:13 #12
20020001 - true
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:14 #13
Reduktion: jeg er bare efter dine overflødige ()-er og {1} - jeg synes
det er mere læseligt uden. Chacun a son gout.
Avatar billede soreno Praktikant
22. oktober 2003 - 15:15 #14
([0-9]{4})((0[1-9]{1})|(1)[0-2]{1})(((0[1-9]{1})|(1|2)[0-9]{1})|(3)[0-1]{1})

20020001 - false
Avatar billede soreno Praktikant
22. oktober 2003 - 15:19 #15
Jeg kunne da godt tænke mig at se en version af ovenstående uden parenteser.
Avatar billede erikjacobsen Ekspert
22. oktober 2003 - 15:26 #16
Jah, en anden gang - jeg ønsker egentlig ikke til at medvirke til at
udbrede denne løsning, som jeg ikke synes er god. Du kan vist ikke undvære alle;)

Men se her: Hvis man med et yderst simpelt regulært udtryk piller yy,mm,dd ud
(og trækker een fra måneden, og laver dem til tal), så vil et perfect check
være i retning af:

yy=2002; mm=1; dd=31;  // 0=january, 1=february
d=new Date(yy,mm,dd);
if (d.getYear()==yy && d.getMonth()==mm && d.getDate()==dd) {
  alert("OK: "+d);
} else {
  alert("Fejl: "+d);
}

Er det så meget for meget for at få det helt rigtigt??
Avatar billede zaknafein Praktikant
23. oktober 2003 - 09:37 #17
Ja jeg endte op med at bruge den gode løsning.
En ændret version af mit lange javascript.
Tak for hjælpen alligevel.
Avatar billede zaknafein Praktikant
30. oktober 2003 - 10:14 #18
I må godt smide svar begge to og få point.
Avatar billede soreno Praktikant
30. oktober 2003 - 10:16 #19
Giv dem til Erik.
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 10:24 #20
ok da
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