Saltar al contenido

PHP Regex para verificar la fecha está en formato AAAA-MM-DD

Esta reseña ha sido probado por nuestros especialistas así se garantiza la veracidad de esta sección.

Solución:

Prueba esto.

$date="2012-09-12";

if (preg_match("/^[0-9]4-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) 
    return true;
 else 
    return false;

Probablemente sea mejor usar otro mecanismo para esto.

La solución moderna, con DateTime:

$dt = DateTime::createFromFormat("Y-m-d", $date);
return $dt !== false && !array_sum($dt::getLastErrors());

Esto valida la entrada también: $dt !== false asegura que la fecha se puede analizar con el formato especificado y el array_sum truco es una forma concisa de asegurarse de que PHP no hizo "cambio de mes" (por ejemplo, considere que el 32 de enero es el 1 de febrero). Ver DateTime::getLastErrors() para más información.

Solución de la vieja escuela con explode y checkdate:

list($y, $m, $d) = array_pad(explode('-', $date, 3), 3, 0);
return ctype_digit("$y$m$d") && checkdate($m, $d, $y);

Esto valida que la entrada también sea una fecha válida. Puede hacerlo con una expresión regular, por supuesto, pero será más complicado, y el 29 de febrero no se puede validar con una expresión regular.

El inconveniente de este enfoque es que debe tener mucho cuidado para rechazar todas las posibles entradas "malas" sin emitir un aviso bajo ninguna circunstancia. Así es cómo:

  • explode está limitado a devolver 3 tokens (de modo que si la entrada es "1-2-3-4", $d se convertirá en "3-4")
  • ctype_digit se usa para asegurarse de que la entrada no contenga ningún carácter no numérico (aparte de los guiones)
  • array_pad se utiliza (con un valor predeterminado que hará que checkdate para fallar) para asegurarse de que se devuelvan suficientes elementos para que si la entrada es "1-2" list() no emitirá un aviso

aaaa-mm-dd :/^((((19|[2-9]d)d2)-(0[13578]|1[02])-(0[1-9]|[12]d|3[01]))|(((19|[2-9]d)d2)-(0[13456789]|1[012])-(0[1-9]|[12]d|30))|(((19|[2-9]d)d2)-02-(0[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-02-29))$/g

aaaa/mm/dd :/^((((19|[2-9]d)d2)/(0[13578]|1[02])/(0[1-9]|[12]d|3[01]))|(((19|[2-9]d)d2)/(0[13456789]|1[012])/(0[1-9]|[12]d|30))|(((19|[2-9]d)d2)/02/(0[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))/02/29))$/g

mm-dd-aaaa :/^(((0[13578]|1[02])-(0[1-9]|[12]d|3[01])-((19|[2-9]d)d2))|((0[13456789]|1[012])-(0[1-9]|[12]d|30)-((19|[2-9]d)d2))|(02-(0[1-9]|1d|2[0-8])-((19|[2-9]d)d2))|(02-29-((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g

mm/dd/aaaa:/^(((0[13578]|1[02])/(0[1-9]|[12]d|3[01])/((19|[2-9]d)d2))|((0[13456789]|1[012])/(0[1-9]|[12]d|30)/((19|[2-9]d)d2))|(02/(0[1-9]|1d|2[0-8])/((19|[2-9]d)d2))|(02/29/((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g

dd/mm/aaaa :/^(((0[1-9]|[12]d|3[01])/(0[13578]|1[02])/((19|[2-9]d)d2))|((0[1-9]|[12]d|30)/(0[13456789]|1[012])/((19|[2-9]d)d2))|((0[1-9]|1d|2[0-8])/02/((19|[2-9]d)d2))|(29/02/((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g

dd-mm-aaaa :/^(((0[1-9]|[12]d|3[01])-(0[13578]|1[02])-((19|[2-9]d)d2))|((0[1-9]|[12]d|30)-(0[13456789]|1[012])-((19|[2-9]d)d2))|((0[1-9]|1d|2[0-8])-02-((19|[2-9]d)d2))|(29-02-((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.