Есть ли краткий способ проверки, если параметр существует и больше нуля? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь проверить, предоставлен ли параметр и соответствует ли он критериям, но кажется многословным. Вот что у меня есть:

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

Я думаю, что это безопасно, но есть ли более краткий способ достичь этого, оставаясь при этом безопасным?

Ответы [ 4 ]

1 голос
/ 15 мая 2019

Вы можете использовать preg_match и посмотреть, является ли первый символ [1-9], а затем любые цифры.
Это не позволит нулевые значения или пустые или строки.

Вы можете добавить тройной островок, но он короче того, что находится за пределами моей досягаемости.

if(preg_match("/^[1-9]\d*$/", (isset($str) ? $str : 0))){
    // Something
}
0 голосов
/ 15 мая 2019

Используйте filter_input или filter_var

if (isset($request['limit']) {
    $var = filter_var($request['limit'], FILTER_VALIDATE_INT, ['min_range' => 0]);
    if ($var) {
       $post_params['posts_per_page'] = $var;
    }
}

Но в идеале вы будете делать это при создании массива $ request.

$request = [
    'limit' => filter_input(INPUT_GET, 'limit', FILTER_VALIDATE_INT, ['min_range' => 0])
];
if ($request['limit']) {
    $post_params['posts_per_page'] = $var;
}
0 голосов
/ 15 мая 2019

Вы можете использовать

if (isset($request['limit']) and intval($request['limit']) > 0) {
    $post_params['posts_per_page'] = (int)$request['limit'];
}
0 голосов
/ 15 мая 2019

Не уверен, что вы считаете это сокращением ...

$correct = @(preg_match('/^[1-9]\d*$/', $request['limit']));

"@" подавит любое предупреждение в этом предложении, но единственное предупреждение, которое вы можете получить, это то, что переменная не определена,так что это контролируется.

...