0

大家好,我有一个帖子值,我正在检查它是否已发布,它至少有 4 个数字(数字),这很完美。

if (isset($_POST['year']) && 
      !preg_match('/([0-9]{4})/i', stripslashes(trim($_POST['year']))) ) {

现在我想检查该值是否更大或=一个变量,并且不确定如何实现我需要的

我尝试了以下没有运气

$yearOff = date("Y")-150;
echo $yearOff;


    if (isset($_POST['year']) && 
            !preg_match('/([0-9]{4})/i', stripslashes(trim($_POST['year']))) 
            && $_POST['year'] > $yearOff ) {

                   $ageerrors[] = '<span class="error">
                                      You forgot enter your birth YEAR</span>';
    }
4

2 回答 2

2

而不是&&你需要一个||OR 条件来在三种可能的无效状态之间切换(空,不是 4+ 位,或者<= $yearOff

if (!isset($_POST['year'])
   // Lose the stripslashes()...
   || !preg_match('/([0-9]{4})/i',trim($_POST['year']))
   || $_POST['year'] > $yearOff 
   ) {
    // Invalid...
}

注意:从您的描述中不清楚您希望该值是>= $yearOff还是希望它是< $yearOff。换句话说,上面的代码正在测试无效状态。使用适用于无效状态的任何运算符。

注意 2:要测试正则表达式中至少 4 个连续数字,更好的模式是:

/\d{4,}/
// If it must be *only* digits and no other characters, anchor with ^$
/^\d{4,}$/

不需要()捕获组的开销。

于 2012-08-10T14:23:21.803 回答
1
$yearOff = date("Y")-150;
echo $yearOff;

$input = @$_POST['year'];

if (!$input || strlen($input) !== 4 || $input < $yearoff) {
    ### MEEEP, ERROR ###
}

解释:

输入已设置(不是null为假),然后它的字符串长度必须为四,最后它的数值必须高于或等于$yearOff

我也将输入的值分配给了它自己的变量,因为你只需要将它从$_POST.

由于所有这些条件都被否定,我使用了 or||运算符。自然地,相同的可以表示为非否定和用 and:

if ($input && strlen($input) === 4 && $input >= $yearoff) {
    ### THIS IS CALL OKAY ###
}

为了更好地调试它,下一步是将有效性分配给一个变量:

$inputValid = $input && strlen($input) === 4 && $input >= $yearoff;
if (false === $inputValid) [
    ### MEEP, ERROR ####
}  

希望这会有所帮助。

于 2012-08-10T14:24:13.770 回答