Avatar billede w13 Novice
21. oktober 2007 - 16:54 Der er 18 kommentarer og
1 løsning

Valider dato i format "00-00-0000"

Hej Eksperter.

Jeg har ledt efter en regexp., som kan tjekke, om this.value er skrevet som "00-00-0000". Dvs. 2 tal, bindestreg, 2 tal, bindestreg, 4 tal.

Mit største problem er, at den helst skulle kunne acceptere det, mens man skrev, sådan at "00-" og "00-00-" også blev godkendt.

Er det muligt? Er det let? Er der nogen, som kan hjælpe? :)
På forhånd tak!
W13
Avatar billede nielle Nybegynder
21. oktober 2007 - 16:59 #1
Sådan?

^\d{2}-(\d{2}-(\d{4})?)?$
Avatar billede w13 Novice
21. oktober 2007 - 17:15 #2
Tjaeh, min kode fungerer ikke helt efter hensigten.

Når jeg sletter et tal, kan jeg sagtens skrive en masse bogstaver i stedet for det.

Og når jeg for eksempel her rettet, så der står "00-00-", kan jeg ikke tilføje noget som helst efter bindestregen.

Koden er nu:
----------------------------------------------
<html>
<head>
<script type="text/javascript">
function AllowOnlyDate(elm){
    if(elm.match(/^\d{2}-(\d{2}-(\d{4})?)?$/gi)) return false;
}
</script>
</head>
<body>

<input type="text" value="00-00-0000" onkeypress="return AllowOnlyDate(this.value)">

</body>
</html>
Avatar billede w13 Novice
21. oktober 2007 - 17:16 #3
Jeg glemte i øvrigt i mit originale spg., at de 2 første nuller jo helst ikke skal kunne overstige 31, og de 2 næste helst ikke skal kunne overstige 31.
Det er der lige 50 ekstra point for. Ellers opretter jeg bare et nyt spg. bagefter.
Avatar billede w13 Novice
21. oktober 2007 - 17:18 #4
Wups, en lille typo:

*og de 2 næste helst ikke skal kunne overstige 12.
Avatar billede nielle Nybegynder
21. oktober 2007 - 17:31 #5
Hvis du vil validere for hver tastetryk - i modsætning til f.eks. at validere lige inden at feltet moister fokus eller ved at formen submittes - så har du et lille problem: Undervejes med at man taster bliver man jo nødt til at passere igennem flere "ulovlige datoer".
Avatar billede w13 Novice
21. oktober 2007 - 17:38 #6
Jo, men din kode virker da et godt stykke af vejen. Kan dog ikke lige greje fejlen.

"Reglerne" for valideringen må være således:

Tegn 1: 0-3
Tegn 2: 0-9
(Disse 2 skulle selvfølgelig helst ikke gi' mere end 31 sammensat, men hvis det er besværligt, kan vi glemme det.)
Tegn 3: -
Tegn 4: 0-1
Tegn 5: 0-9
(Disse 2 skulle helst ikke gi' mere end 12 sammensat.)
Tegn 6-9: 0-9

Men siger du, at det ikke er muligt, at opstille disse regexp-regler, samtidig med, at det kan være tilladt kun at skrive f.eks. første halvdel af datoen?

Den skulle jo gerne acceptere både "2", "21", "21-", "21-0", "21-09", "21-09-", "21-09-2", "21-09-20", "21-09-200", "21-09-2007".
Avatar billede w13 Novice
21. oktober 2007 - 17:39 #7
Så de ulovlige datoer, du snakker om, må være dem jeg skrev i sidste linje.
Bogstaver og andre tegn end 0-9 og "-" skulle dog ikke kunne accepteres.
Avatar billede nielle Nybegynder
21. oktober 2007 - 17:40 #8
Ok, men det bliver altså et sandt monster af en regexp! :^)
Avatar billede pidgeot Nybegynder
21. oktober 2007 - 17:41 #9
På ingen måde testet, men et bud:

^(?:[012]?\d?)|(?:3?[01]?)-?(?:0?\d?)|(?:1?[012]?)-?\d{0,4}$
Avatar billede w13 Novice
21. oktober 2007 - 17:41 #10
Shit. Nå.. Jamen så lader vi den idé passere.

Kan du hjælpe, hvis jeg så bare leder efter en, der validerer efter de første "regler", jeg opsatte, dvs. ved submit, når datoen er indtastet?
Avatar billede w13 Novice
21. oktober 2007 - 17:41 #11
Jeg forsøger lige den.
Avatar billede w13 Novice
21. oktober 2007 - 17:42 #12
Desværre Pidgeot, jeg må ikke skrive/rette noget med den :)
Avatar billede nielle Nybegynder
21. oktober 2007 - 17:45 #13
Derv er yderligt et problem med at forsøge med onkeypress() for den har kun fat i værdien som den så ud *før* det nye tastetryk.
Avatar billede nielle Nybegynder
21. oktober 2007 - 17:46 #14
Jeg foreslår valifering på onBlur eller ved submit:

^(3[01]|[012]\d)-(1[012]|0\d)-(19|20)\d{2}$
Avatar billede w13 Novice
21. oktober 2007 - 17:47 #15
Ja, det må nok bare være ved onsubmit. Hvordan tester jeg så, om det er gyldig dato i formatet dd-mm-yyyy?
Avatar billede w13 Novice
21. oktober 2007 - 17:48 #16
Prøver.
Avatar billede w13 Novice
21. oktober 2007 - 17:52 #17
Det virker fint. Har rettet det med året, så alle år fra 0000-9999 er tilladte, da jeg ikke behøver den anden restriktion. Så nu er koden således:

^(3[01]|[012]\d)-(1[012]|0\d)-\d{4}$

Hvis du opretter svar, Nielle, så får du point. =)
Avatar billede nielle Nybegynder
21. oktober 2007 - 17:54 #18
Tja, jeg tænkte bare at det måske ikke var så relevante årstal :^)

... og et svar :^)
Avatar billede w13 Novice
21. oktober 2007 - 17:58 #19
Nielle>> Jeg skal bruge koden generelt, når jeg laver hjemmesider. (Har lavet en funktion, som netop køres ved submit, der løber alle formfelter igennem og validerer efter felternes title-attribut. Hvis den er sat til "påkrævet", skal feltet udfyldes, hvis den er "numerisk" skal det være tal, "email" skal være gyldig adresse, "password" skal være lig med "gentag password", osv. Så her putter jeg den bare ind.)

Det kunne jo være, jeg skulle bruge den til et "Hvornår opdagede Columbus Amerika"-felt. =) Man ved aldrig, hvad man kan komme til at skulle bruge. =P
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