[PHP]Datum invoer controleren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
Ik heb een script dat een datum in het formaat mm/dd/yyyy doorstuurt naar de database. Ik wil echter dat deze datum gecontroleert wordt voordat hij ingevoerd wordt.

Ik had al wat zitten proberen met reguliere expressies maar ik snap daar nooit erg veel van. Ik wil in iedergeval dat het script controleert of het formaat van de datum goed is dus als 00/00/0000 en niet 00000/0asdnas-sda ofzo. Ik zou ook nog graag willen dat er word gecontroleerd of maand <= 12 en dagen <=31.

Kan iemand mij helpen, ik heb van alles geprobeert maar het wilt maar niet lukken.

ps, dit heb ik nu, het zal wel 100% crap zijn (patroon voor eregi) |:(

code:
1
$patroon = ".[0-9]{1,12}\/.[0-9]{1,31}\/.[0-9]";


alvast bedankt!

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Is het geen idee om met selects te werken zodat het meteen duidelijk is voor de gebruikers?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat wilde ik eerst doen maar de ene maand heeft 31 dagen en de andere 30 en februari soms 28 dus ik weet niet hoe ik dat dan moet oplossen.

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 23:00
De { } zijn om aan te geven hoe vaak de eenheid ervoor herhaald mag worden, niet de lower en upper boundary van de eenheid:

[0-9]{1, 12} geeft aan dat er een reeks cijfers met een lengte van 1 tot 12 gematched wordt...

/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/

Matched iig het goede formaat, maar 99/99/9999 komt er dus ook doorheen en 99/03/2999 ook...

[ Voor 25% gewijzigd door Morrar op 20-04-2004 18:55 ]


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Verwijderd schreef op 20 april 2004 @ 18:51:
Ja dat wilde ik eerst doen maar de ene maand heeft 31 dagen en de andere 30 en februari soms 28 dus ik weet niet hoe ik dat dan moet oplossen.
Misschien kun je daarvoor wel javascript gebruiken welke de lijst met het aantal dagen aanpast als je een andere maand selecteert.

Als je wat meer over Regular Expressions wilt weten, in de PW FAQ staat ook het een en anderr uitgelegd.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 20 april 2004 @ 18:51:
Ja dat wilde ik eerst doen maar de ene maand heeft 31 dagen en de andere 30 en februari soms 28 dus ik weet niet hoe ik dat dan moet oplossen.
Maak gewoon een array waarin je zet hoeveel dagen ze hebben? Dit kun je letterlijk op je vingers natellen :) Afijn: je knokkels dan...

[ Voor 4% gewijzigd door djluc op 20-04-2004 18:55 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 23:00
Javascript beperkt dan wel de invoermogelijkheden, het checkt echter NIKS!

Iemand kan rustig een ander form naar je script opsturen, onthoud dat altijd als je een app maakt. Het geeft dus geen garantie op correcte invoer.

Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon even je string splitten met explode() en vervolgens de stukken aan mktime() voeren. De mktime() functie corrigeert op eigen initiatief als je het een illegale datum voert (31/2/2004 of zo). Als je dat niet wilt vergelijk je het resultaat met de invoer en geef je een foutmelding als ze niet overeenstemmen.

Voor de vuist weg:

list($day,$month,$year)=explode(',',$input);
$date = date('d/M/Y',mktime(0,0,0,$month,$day,$year));

if ($day != $input) protest();

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik liever geen javascript omdat ik het nog nooit heb gebruikt en het script waarmee ik bezig ben gewoon helemaal zelf geschreven wil hebben.
Ik ben al tevreden als het formaat word gecontroleerd van de invoer en dan kan ik ook nog strtotime() doen en daarna met date m/d/F een zelfde string formaat als de invoer maken. want als je bij strtotime() bijvoorbeeld 13/20/2004 invoert dan word het automatische 01/20/2004 (in unix timestamp) dus dan vergelijk ik de invoer en de omgezette date met elkaar, goeie oplossing?

Dus ik wil alleen nog weten hoe ik de lengte en opbouw van de invoer controleer zoals ik op het begin al vroeg.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 20 april 2004 @ 19:04:
list($day,$month,$year)=explode(',',$input);
$date = date('d/M/Y',mktime(0,0,0,$month,$day,$year));

if ($day != $input) protest();
Wil je niet net de variable $date vergelijken? :?

Wat ik trouwens bedoelde met de vingers methode is dat je op je knokkels kunt tellen hoeveel dagen een maand heeft: je linkerpink is januari, en zo kun je doortellen. Een knokkel is dus 31 voor diegenen die het nog niet helemaal begrepen hebben. :D

[ Voor 39% gewijzigd door djluc op 20-04-2004 19:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Tja, voor de vuist weg heeft blijkbaar twee betekenissen ;-)

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
2
3
$input = '12/34/5678';
$exploded = explode('/',$input)
$tijd getdate(mktime(0,0,0,$exploded[0],$exploded[1],$exploded[2]));

Zie http://www.php.net/getdate voor meer info.

[ Voor 8% gewijzigd door Skaah op 21-04-2004 16:41 ]


Acties:
  • 0 Henk 'm!

  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 19-09 07:49

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX

Pagina: 1