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/Y
ad 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).