Non esiste davvero un modo adatto per convalidare un campo data, tutto quello che puoi fare è dividerlo e controllarlo in parti ..
C'è checkdate(), ma come menzionato nei commenti sulla pagina dei documenti non può essere usato come mezzo efficace per disinfettare l'inserimento della data.
La prima cosa che controllo di solito è il tipo di dati, se mi aspetto una stringa, quindi esegui il cast in una stringa e allo stesso modo per i valori interi e array.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
Per i campi data in genere è presente un separatore tra ciascuna parte della data, diviso in base a quello e trasmetti le parti (per quanto ti aspetti) come numeri interi.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
Naturalmente questo dipende davvero da come memorizzi la data e cosa ti aspetti in quel campo, è qualcosa che dovrai solo disinfettare in modo appropriato in base alle tue esigenze specifiche.
I valori numerici sono abbastanza facili, prima il cast in int ..
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Quindi controlla che rientri nell'intervallo specificato (per la tua domanda).
// 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
}
Controllare se una stringa ha una lunghezza particolare è facile, quindi in effetti ho intenzione di collegarti alla documentazione di PHP per strlen.
http://php.net/manual/en/function.strlen.php
I valori della data sono i più difficili secondo me, ma in realtà è un caso di scrivere il tuo codice per soddisfare ciò che ti aspetti da quel campo. Se hai un campo con un formato data, D/M/Yad esempio, sai che la /(barra) sarà (dovrebbe) essere presente e che la divisione su quel delimitatore dovrebbe darti un array di 3 valori numerici ... (se la divisione non lo fa ' ti danno 3 valori, o nessuno dei valori numerici non è valido, quindi i dati non erano validi).
Spero che sia d'aiuto .. (e sono aperto alla critica se qualcuno ha un metodo migliore per uno di questi).