Sto provando a convalidare la data usando PHP.Convalida il formato della data in php
mi piacerebbe seguenti formati di essere valida:
d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy
Ho provato molte espressioni regolari e diverse varianti di checkdate function(). Attualmente ho qualcosa di simile:
function _date_is_valid($str)
{
if(strlen($str) == 0)
return TRUE;
if(substr_count($str,'/') == 2)
{
if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
{
$datearray = explode('/',$str);
if($datearray[2] > 2030)
return FALSE;
return checkdate($datearray[1], $datearray[0], $datearray[2]);
}
else
{
return FALSE;
}
}
return FALSE;
}
Questa data però, convalida date come 11/11/200 e 11/11/200 #
Come posso convalidare per abbinare formato richiesto?
Modifica: Potrei controllare datearray [2] tra 10 e 30 e 2010 e 2030. Ma c'è un modo per controllarlo usando regex?
Edit1: restituisce TRUE su strlen ($ str) == 0 è perché voglio che gli utenti siano in grado di aggiungere eventi senza sapere quando si verificherà l'evento in modo che qualcun altro possa qualificare la pianificazione e assegnare l'evento a una determinata data successiva
Solo per la cronaca. Ho finito per fare:
function _date_is_valid($str)
{
if(strlen($str) == 0) //To accept entries without a date
return TRUE;
if(substr_count($str,'/') == 2)
{
list($d,$m,$y) = explode('/',$str);
if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))
{
return checkdate($m,$d,$y);
}
}
return FALSE;
}
Grazie per tutte le vostre risposte
Dovrebbe essere checkdate(), non check_date(). A parte questo, mi sembra buono. +1 –
se non si controlla il conteggio di '/' si genera un avviso php o avviso su stringhe non valide – antpaw
Ho modificato questo un po 'per non convalidare le date dopo un determinato anno poiché php checkdate() convalida anni come 20111 che in questo caso non è quello che voglio – LukeP