There's really no suitable way to validate a date field, all you can do is split it up and check it in parts..
There's checkdate()
, but as mentioned in the comments on the docs page it cannot be used as an effective means to sanitizing date input..
First thing i usually check is the type of data, if expecting a string then cast to a string and likewise for integer and array values.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
For date fields you typically have a seperator between each part of the date, split based on that and cast the parts(however many you're expecting) as integers.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
Of course this really depends how you store the date and what you're expecting in that field, it's something you'll just have to sanitize appropriately according to your specific needs.
Numeric values are quite easy, first cast to int..
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Then check it's within your given range(per your question).
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
or..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
Checking if a string is a particular length is easy, so easy in fact i'm just going to link you to the PHP documention for strlen.
http://php.net/manual/en/function.strlen.php
The date values are the most tricky in my opinion, but really it's a case of writing your code to suit what you expect from that field. If you have a field with a date format of D/M/Y
for example you know that the /
(forward slash) will(should) be present and that splitting on that delimeter should give you an array of 3 numeric values... (if the split doesn't give you 3 values, or any aren't valid numeric values, then the data was invalid)..
Hope that helps.. (and i'm open to critique if anyone has a better method for any of the above).