Il n'y a vraiment aucun moyen approprié de valider un champ de date, tout ce que vous pouvez faire est de le diviser et de le vérifier en plusieurs parties.
Oui checkdate()
, mais comme mentionné dans les commentaires sur la page des documents, il ne peut pas être utilisé comme un moyen efficace de désinfecter la saisie de la date.
La première chose que je vérifie habituellement est le type de données, si vous attendez une chaîne, convertissez-la en chaîne et de même pour les valeurs entières et de tableau.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
Pour les champs de date, vous avez généralement un séparateur entre chaque partie de la date, divisé en fonction de cela et convertissez les parties (autant que vous attendez) en entiers.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
Bien sûr, cela dépend vraiment de la façon dont vous stockez la date et de ce que vous attendez dans ce domaine, c'est quelque chose que vous devrez simplement désinfecter de manière appropriée en fonction de vos besoins spécifiques.
Les valeurs numériques sont assez faciles, tout d'abord converties en int.
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Vérifiez ensuite qu'il est dans votre plage donnée (selon votre question).
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
ou..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
Vérifier si une chaîne a une longueur particulière est facile, donc facile en fait, je vais simplement vous lier à la documentation PHP pour strlen.
http://php.net/manual/en/function.strlen.php
Les valeurs de date sont les plus délicates à mon avis, mais il s'agit vraiment d'écrire votre code pour répondre à ce que vous attendez de ce champ. Si vous avez un champ avec un format de date D/M/Y
par exemple, vous savez que la /
(barre oblique) sera (devrait) être présente et que le fractionnement sur ce délimètre devrait vous donner un tableau de 3 valeurs numériques ... (si le fractionnement ne fonctionne pas) t vous donne 3 valeurs, ou aucune valeur numérique n'est valide, alors les données n'étaient pas valides) ..
J'espère que cela aide .. (et je suis ouvert à la critique si quelqu'un a une meilleure méthode pour tout ce qui précède).