Hei!
Löysin tarvitsemani koodin pätkän php.netistä. Se on kirjoitettu muodolle "YYYY-MM-DD HH:MM:SS".
function Check_Date_Time($date_time)
{
if (preg_match("/^([123456789][[:digit:]]{3})-
(0[1-9]|1[012])-(0[1-9]|[12][[:digit:]]|3[01])
(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/",
$date_time, $part) && checkdate($part[2], $part[3], $part[1]))
{
return true;
}
else
{
return false;
}
}
Voisiko joku selittää tarkemmin kohdan:
("/^([123456789][[:digit:]]{3})-
(0[1-9]|1[012])-(0[1-9]|[12][[:digit:]]|3[01])
(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/",
$date_time, $part) && checkdate($part[2], $part[3], $part[1]))
Se ei aukene minulle niin hyvin, että osaisin muuttaa sen muodolle "YYYY-MM-DD".
Löysin tarvitsemani koodin pätkän php.netistä. Se on kirjoitettu muodolle "YYYY-MM-DD HH:MM:SS".
function Check_Date_Time($date_time)
{
if (preg_match("/^([123456789][[:digit:]]{3})-
(0[1-9]|1[012])-(0[1-9]|[12][[:digit:]]|3[01])
(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/",
$date_time, $part) && checkdate($part[2], $part[3], $part[1]))
{
return true;
}
else
{
return false;
}
}
Voisiko joku selittää tarkemmin kohdan:
("/^([123456789][[:digit:]]{3})-
(0[1-9]|1[012])-(0[1-9]|[12][[:digit:]]|3[01])
(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/",
$date_time, $part) && checkdate($part[2], $part[3], $part[1]))
Se ei aukene minulle niin hyvin, että osaisin muuttaa sen muodolle "YYYY-MM-DD".
Vastaukset 1
Vanhimmat
Siis preg_mach funktio ottaa kolme parametriä:
1. Parametri (säännöllinen lause)
Alla on esimerkkisissäsi oleva säännöllinen lause hajotettuna osiin.
^ => Eli rivin alku
([123456789][[:digit:]]{3}) = 1-9 0-9 (3 kertaa) = 1000-9999 => Eli YYYY
- => Eli -
(0[1-9]|1[012]) = 01-09 tai 10-12 = 01-12 => Eli MM
- = >Eli -
(0[1-9]|[12][[:digit:]]|3[01]) = 01-09 tai 10-29 tai 30-31 = 01-31 = 01-31 => Eli DD
=> Eli
(0[0-9]|1[0-9]|2[0-3]) = 00-09 tai 10-19 tai 20-23 = 00-23 => Eli HH
: => Eli :
([0-5][0-9]) = 00-59 => Eli MM
: => Eli :
([0-5][0-9]) = 00 - 59 => Eli SS
$ => Eli rivin loppu
2. Jono jota yritetään sovittaa lausekkeeseen
$date_time
3. Taulukko johon tulokset tallennetaan
$part
Preg_match funktion suorituksen jälkeen, jos sovitus onnistui, $part[0] muuttujassa on sovitettava jono, $part[1]:ssä ensimmäinen säännöllisen lausekkeen aaltosulku lohko (joka oli vuosiluku), part[2]:ssa toinen säännöllisen lausekkeen aaltosulku lohko (joka oli kuukausi), jne.
Tämän jälkeen varmistetaan checkdate funktiolla se, että saatu päivämäärä on oikea. Tämä sen takia koska pelkkä preg_match varmistaa vain sen, että päiväys on muotoa "YYYY-MM-DD HH:MM:SS", muttei esimerkiksi varmista päiväyksen oikeellisuutta esim. päiväystä "2006-04-31 ..." ei voi olla olemassa, (ja tämän takia siis joudutaan käyttämään vielä checkdatea)
Varsinainen vastaus on siis:
function Check_Date_Time($date_time)
{
if (preg_match("/^([123456789][[:digit:]]{3})-
(0[1-9]|1[012])-(0[1-9]|[12][[:digit:]]|3[01])$/",
$date_time, $part) && checkdate($part[2], $part[3], $part[1]))
{
return true;
}
else
{
return false;
}
}