Realmente no hay una forma adecuada de validar un campo de fecha, todo lo que puede hacer es dividirlo y verificarlo en partes.
Hay checkdate()
, pero como se menciona en los comentarios en la página de documentos, no se puede usar como un medio eficaz para desinfectar la entrada de fecha.
Lo primero que generalmente verifico es el tipo de datos, si se espera una cadena, se convierte en una cadena y del mismo modo para valores enteros y de matriz.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
Para los campos de fecha, generalmente tiene un separador entre cada parte de la fecha, dividido en función de eso y proyectando las partes (por muchas que espere) como enteros.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
Por supuesto, esto realmente depende de cómo almacene la fecha y lo que espera en ese campo, es algo que tendrá que desinfectar adecuadamente según sus necesidades específicas.
Los valores numéricos son bastante fáciles, primero emitidos a int ..
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Luego verifique que esté dentro de su rango dado (según su pregunta).
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
o..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
Verificar si una cadena es de una longitud particular es fácil, de hecho, tan fácil que solo voy a vincularlo a la documentación de PHP para strlen.
http://php.net/manual/en/function.strlen.php
Los valores de fecha son los más difíciles en mi opinión, pero en realidad se trata de escribir su código para que se ajuste a lo que espera de ese campo. Si tiene un campo con un formato de fecha, D/M/Y
por ejemplo, sabe que la /
(barra diagonal) estará (debería) estar presente y que la división en ese delímetro debería proporcionarle una matriz de 3 valores numéricos ... (si la división no ' t le da 3 valores, o cualquiera no son valores numéricos válidos, entonces los datos no eran válidos).
Espero que ayude ... (y estoy abierto a la crítica si alguien tiene un mejor método para cualquiera de los anteriores).