确实没有合适的方法来验证日期字段,您所能做的就是将其拆分并分成几部分进行检查。
有checkdate()
,但正如docs页面上的注释中所述,它不能用作对日期输入进行消毒的有效手段。
我通常检查的第一件事是数据类型,如果期望一个字符串,然后转换为字符串,同样对于整数和数组值。
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
对于日期字段,通常在日期的每个部分之间都有一个分隔符,并根据该分隔符将各个部分(无论您期望多少)转换为整数。
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
当然,这实际上取决于日期的存储方式以及该字段的期望值,您只需要根据自己的特定需求对其进行适当的消毒即可。
数值很容易,首先转换为整数。
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
然后检查它是否在给定范围内(根据您的问题)。
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
要么..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
检查字符串是否为特定长度很容易,因此实际上我很容易将您链接到PHP文档以获得strlen。
http://php.net/manual/zh/function.strlen.php
在我看来,日期值是最棘手的,但实际上是在编写代码以适合您对该字段的期望的情况。如果您有一个日期格式D/M/Y
为例如的字段,则您知道/
(应该)出现(正斜线),并且在该分度符上进行拆分应为您提供3个数值的数组...(如果拆分不包含) t给您3个值,或者任何无效的数字值,则数据无效)。
希望能有所帮助..(如果有人对上述任何方法有更好的方法,我很乐意提出批评)。