如何在PHP中验证一个无符号数?

kqlmhetl  于 2023-03-11  发布在  PHP
关注(0)|答案(4)|浏览(144)

我不知道该如何处理这个问题,我试过对我来说最明显的解决方案,但到目前为止还没有一个完全令人满意,我一定是忽略了一些非常简单的东西。
我有一个输入类型为text的表单:

<input type="text" name="album_id">

我想验证输入,以便用户只输入无符号整数...

$required = array(); // required or invalid input

$tmp = trim($_POST['album_id']);

if (!is_int((int)$tmp)) {
   $required['album'] = 'The album id must contain a positive numeric value only.';
}

到目前为止,我使用的是!is_numeric($tmp),但用户可以输入9.2或“1e4”,它将进行验证......因此其中一个不起作用。
我也试过!is_int((int)$tmp),但由于某种原因,那个不起作用(也许它应该起作用,但我做错了...)。我试过ctype_digit,但没有成功。我可能忽略了一些东西,但不确定是什么。
如何在php中验证一个无符号数?没有浮点数,负数等...只有一个简单的无符号数(1到n)。

gudnpqoy

gudnpqoy1#

如果您想检查某个变量是否只包含数字 (这似乎是您想要的),您可能必须使用ctype_digit()
不知道你尝试了什么,但像这样的东西应该工作:

$tmp = trim($_POST['album_id']);
if (ctype_digit($tmp)) {
    // $tmp only contains digits
}
ycggw6v2

ycggw6v22#

filter_var()函数是完成此任务的合适工具。
下面是一个只对无符号整数或无符号整数字符串返回非false的过滤器:

$filteredVal = filter_var($inputVal, 
                          FILTER_VALIDATE_INT, 
                          array('options' => array('min_range' => 0)));

这是documentation on filters
示例:

<?php

$testInput = array(
            "zero string" => "0",
            "zero" => 0,
            "int" => 111,
            "string decimal" => "222",
            "empty string" => "",
            "false" => false,
            "negative int" => -333,
            "negative string decimal" => "-444",
            "string octal" => "0555",
            "string hex" => "0x666", 
            "float" => 0.777,
            "string float" => "0.888",
            "string" => "nine"
         ); 

foreach ($testInput as $case => $inputVal)
{
    $filteredVal = filter_var($inputVal, 
                              FILTER_VALIDATE_INT, 
                              array('options' => array('min_range' => 0)));

    if (false === $filteredVal)
    {
        print "$case (". var_export($inputVal, true) . ") fails\n";
    } 
    else
    { 
        print "$case (". var_export($filteredVal, true) . ") passes\n";
    }
}

输出:

zero string (0) passes
zero (0) passes
int (111) passes
string decimal (222) passes
empty string ('') fails
false (false) fails
negative int (-333) fails
negative string decimal ('-444') fails
string octal ('0555') fails
string hex ('0x666') fails
float (0.777) fails
string float ('0.888') fails
string ('nine') fails
ffx8fchx

ffx8fchx3#

您可以使用preg_match()

if(preg_match('/^[\\d+]$/', $tmp) == 0)
    $required['album'] = 'The album id must ...';

注意,这不会执行正范围检查(例如,超过整数的最大有效值)。
编辑:使用PascalMARTIN的解决方案,除非你想做更复杂的检查(例如,需要其他特殊字符),因为我猜它提供了更好的性能用于这种用途。

jw5wzhpr

jw5wzhpr4#

if (preg_match('!^[1-9][0-9]*$!',$tmp)) {

相关问题