Avatar billede nemlig Professor
30. september 2007 - 21:52 Der er 24 kommentarer og
1 løsning

Kontrol af indtastet dato

Hej. Jeg har et input-felt, hvor datoen skrives i formatet "dd-mm-yyyy". Jeg har en række kontroller, men mangler lige den sidste.
Vil gerne have et tjek på, at datoen består af 2 cifre + bindestreg + 2 cifre + bindestreg + 4 cifre.
Vil helst undgår Javascript, da jeg har alle andre kontroller i PHP ved "submit":
Avatar billede mccookie Seniormester
30. september 2007 - 22:03 #1
php.net ==> Checkdate så tjekker du om datoen er lovlig :o)
Avatar billede nemlig Professor
30. september 2007 - 22:20 #2
Den har jeg kørende i forvejen, men den fanger det ikke, hvis der er skrevet "22-12-78".
Avatar billede neoman Novice
30. september 2007 - 22:23 #3
Avatar billede nemlig Professor
30. september 2007 - 22:24 #4
Jeg kan vel tjekke de sidste 4 cifre, og derefter kontrollere, om de ligger mellem 1900 og 2007.
Inputfeltet hedder "foedselsdato".

$year = substr($_POST['foedselsdato'],6,4);
if ($year < 1900 or > 2008) {.....
Avatar billede nemlig Professor
30. september 2007 - 22:32 #5
Neoman: Er det ikke javascript, du henviser til? Det er jeg ikke vild med.

Ser ud til, at jeg løser det med:

$year = substr($_POST['foedselsdato'],6,4);
if ($year < 1900 or $year > 2008) {.....

Skal lige teste lidt først.
Avatar billede neoman Novice
30. september 2007 - 22:33 #6
jeg henviser til et regex udtryk du kan hugge og køre i php. At det så tilfældigvis er brugt i JS i spørgsmålet har ikke noget med dit spørgsmål at gøre:)
Avatar billede nemlig Professor
30. september 2007 - 22:39 #7
OK - så er jeg interesseret, men jeg har prøvet det, men får fejl.
Er dog usikker på, hvordan det skal opstilles.
Avatar billede neoman Novice
30. september 2007 - 22:41 #8
her er faktisk en som har gjort det i php http://www.eksperten.dk/spm/711131

(det kan svare sig at søge lidt i gamle spørgsmål :)
Avatar billede nemlig Professor
30. september 2007 - 22:42 #9
Jeg har åbentbart ikke kigget godt nok - prøver lige :)
Avatar billede mccookie Seniormester
30. september 2007 - 22:43 #10
Jeg vil stadig holde på at du skal bruge checkdate og du kan gøre flg.:

1) Lave et felt til hver af de 3 værdier DD MM ÅÅÅÅ og tjekke dem med tjekdate

2) Explode lidt ala det her:
  <?php
    $dato = "11-11-83";
    $tjek = explode("-",$dato);
    ?>
    Så du det liggende i et array og så er det lige til med checkdate.

Det forslag du har gang er lidt som at gå over åen efter vand ;) Men det bestemmer du.

///McCookie
Avatar billede nemlig Professor
30. september 2007 - 22:46 #11
Er lidt i tvivl:
Jeg skriver følgende:
if (eregi("^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$", $_POST['foedselsdato']))

Her tjekker den, om det er sandt, men hvordan gør jeg, hvis den skal gøre det modsatte, nemlig tjekke hvis det er falsk??

Sådan her måske:
if (eregi("^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$", $_POST['foedselsdato'])===FALSE)
Avatar billede neoman Novice
30. september 2007 - 22:50 #12
har PHP ikke en ELSE ? (jeg er ikke en PHP mand) :)
Avatar billede neoman Novice
30. september 2007 - 22:51 #13
eller en "not" eller "!" eller hvordan man nu markerer en "NOT TRUE" i php ?
Avatar billede nemlig Professor
30. september 2007 - 22:52 #14
Mccookie: Jeg anvender checkdate i forvejen, hvor jeg har opsplittet inputtet i dato, måned og år:
if(!@checkdate($maaned, $dag, $year))
Avatar billede neoman Novice
30. september 2007 - 22:54 #15
if !(eregi("^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$", $_POST['foedselsdato']))
skulle checke på falsk
Avatar billede nemlig Professor
30. september 2007 - 22:54 #16
Jeg tror, at det funger nu.
Jeg har nu 3 forskellige kontroller:
1. checkdate
2. eregi
3. Årstallet skal ligge mellem 1900 og date("Y")

Kan sikker gøres smartere, men jeg er tilfreds - også med jeres kommentarer.
Jeg takker mange gange.
Sender I begge et svar og jeg deler pointene.
Avatar billede nemlig Professor
30. september 2007 - 22:55 #17
neoman: Ser ud til, at det også funder med:
if (eregi("^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$", $_POST['foedselsdato'])===FALSE)
Avatar billede erikjacobsen Ekspert
30. september 2007 - 22:56 #18
Brug ikke ereg-funktionerne længere - det er på vej ud af PHP. Hellere de tilsvarende preg-funktioner. Fx:

if (!preg_match("/^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$/", $_POST['foedselsdato']))
Avatar billede neoman Novice
30. september 2007 - 22:58 #19
Ja givetvis - "many ways to skin a cat" :) men det er ikke god skik at teste boolean variables med ting som If A=False THEN  fordi man får det samme ud af at sige If NOT A Then  eller , i php, if (!A) ....:)
Avatar billede neoman Novice
30. september 2007 - 22:59 #20
tihi - godt erik er kommet på, jeg famler jo  rundt i blinde i dette her, pointen var at gøre dig opmærksom på regex:)
Avatar billede neoman Novice
30. september 2007 - 23:03 #21
anyways, godt det funker
Avatar billede nemlig Professor
30. september 2007 - 23:04 #22
Tak Erik - det funger sørme også.
Hvis I så vil være så venlige at sende et svar :-))
Avatar billede erikjacobsen Ekspert
30. september 2007 - 23:07 #23
Ingen point til mig, tak.

Måske lidt overdrevet at slynge ud at ereg-funktionerne er på vej ud. Der er nok rygter om det, men du kan sikkert bruge dem om 5 år. Men preg-erne ligner mere det man ser andre steder, de kan lidt mere, er lidt hurtigere. Jeg ved jeg har noget kode et sted med ereg - og jeg skammer mig ikke (ret meget...)
Avatar billede nemlig Professor
30. september 2007 - 23:17 #24
Erik: Tak for "belæringen" :-) Det er super med dine kommentarer.
Avatar billede nemlig Professor
06. oktober 2007 - 09:17 #25
mangler lige et svar fra mccookie, så jeg kan give 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