Php 是否有一种简捷的方法来检查参数是否存在并且大于零?

Php 是否有一种简捷的方法来检查参数是否存在并且大于零?,php,php-7,Php,Php 7,我试图检查是否提供了一个参数并通过了一个条件,但看起来很冗长。这就是我所拥有的: if (isset($request['limit']) && is_numeric($request['limit']) && (int)$request['limit'] > 0) { $post_params['posts_per_page'] = (int)$request['limit']; } 我认为这是安全的,但是在保持安全的前提下还有更简洁的方法吗?

我试图检查是否提供了一个参数并通过了一个条件,但看起来很冗长。这就是我所拥有的:

if (isset($request['limit']) && is_numeric($request['limit']) && (int)$request['limit'] > 0) {
    $post_params['posts_per_page'] = (int)$request['limit'];
}

我认为这是安全的,但是在保持安全的前提下还有更简洁的方法吗?

< P>不确定你认为这是短手……/P>
$correct = @(preg_match('/^[1-9]\d*$/', $request['limit']));
@将禁止此句子中的任何警告,但您可以得到的唯一警告是变量未定义,因此它是受控的。

使用filter\u input或filter\u var

但理想情况下,在生成$request数组时应该这样做

$request = [
    'limit' => filter_input(INPUT_GET, 'limit', FILTER_VALIDATE_INT, ['min_range' => 0])
];
if ($request['limit']) {
    $post_params['posts_per_page'] = $var;
}
你可以用

if (isset($request['limit']) and intval($request['limit']) > 0) {
    $post_params['posts_per_page'] = (int)$request['limit'];
}

您可以使用preg_match,查看第一个字符是否为[1-9],然后是任意数字。 这将不允许零值、空或字符串

你可以添加一个三元isset,但比它短的是我够不着的

if(preg_match("/^[1-9]\d*$/", (isset($str) ? $str : 0))){
    // Something
}

函数为空?这里是否使用数字$request['limit']我想您可以执行ifintval$request['limit']??0>0,但如果字符串输入以数字开头,则可能会对其做出不同的响应。不确定。@ZainFarooq但是int$request['limit']>0如果不是int是否仍然有效,或者它是否会消亡?它已经在将它转换为int。我们不需要检查它是否是数字本身不会有多大好处,所以它充其量只是部分解决方案。@deceze不会有好处吗?这简直就是在回答这个问题!如果空$foo会让‘abcdef’通过……是的,我否决了这个答案,因为它不是这个问题的解决方案,至少不是一个完整的解决方案。我应该在这里应用什么其他标准?同样,empty-2将返回false,但OP需要检查值是否为gt 0。我相信您甚至可以省略intval,因为类型杂耍将已经解决这个问题。通过123rjt。所以这不适用。不要说请使用请。相反,解释你的答案是什么,以及为什么它能解决老年退休金问题。然后,他们可以尝试自己去理解这是否有助于他们的案例。你如何才能用一个比请使用更好的解释来解释这一点?再次说明:添加解释,解释为什么这样做,告诉我为什么我需要这两个逻辑条件都大于零等等。请记住,您不仅要回答OP,还要回答几年后阅读本文的人,以便了解如何检查参数是否存在且大于零。他们会想知道为什么会这样。@deceze是的,第一部分并不是更好。我更喜欢第二种选择。评论不是为了进行长时间的讨论;这段对话一直是。OP明确表示不想要负数…我还没有看到OP表达了这一点。但是只要去掉-?那就好了。&&int$request['limit']>0…@deceze我通常不太关注OPs代码,更多的是他们想要的解释。我记得它不是零,但我在标题中看到它说大于零。我的错
if(preg_match("/^[1-9]\d*$/", (isset($str) ? $str : 0))){
    // Something
}