自然数范围问题

时间:2016-08-31 03:05:02

标签: php regex

我需要检查通知的变量是否只有 1到10 之间的数字才能继续执行代码。
我尝试了很多方法,使用php本机函数 is_numeric,is_int,ctype_digit ,正则表达式并进行比较以检查变量值是否在范围内,但我遇到了问题。
我的第一次尝试就是:

if($quantity <= 0 || $quantity > 10)
{
    redirect('page.php?msg=error');
    exit();
}
else
{
    //Ok, the value is 1, 2, 3, 4, 5, 6, 7, 8, 9 or 10
}

但是,如果变量是例如:,100001,则此代码将被传递。 PHP is_number允许小数,is_int允许负数,ctype_digit允许000001。我尝试了所有,我想我只能使用正则表达式来实现这一点。我试过/^[0-9]/,但只有第一个数字受到影响。如何只允许1到10之间的自然数?

4 个答案:

答案 0 :(得分:2)

如果$(document).ready(function(){ $('.glyphicon-plus').on("click", function(){ if($(window).width() > 768) { console.log $('???').attr("disabled", "disabled") } }); }); 来自外部输入,例如$quantity$_POST$_GET$_REQUEST,则始终会将其解析为字符串。您可以使用filter_input确保输入转换为适当的类型。

例如,假设您从$_COOKIE获得此值,并且您希望确保它始终是$_POST["quantity"]1之间的有效整数值。

10

以下是一些测试用例,以证明它可以满足您的需求......

if ($quantity = filter_input(INPUT_POST, "quantity", FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 10]])) {
    // It's a valid value from 1 to 10
} else {
    // It's not a valid value we expect :(
}

这应该给你......

$quantity = 1 which is VALID!
$quantity = 0 which is NOT valid :(
$quantity = 10 which is VALID!
$quantity = 11 which is NOT valid :(
$quantity = 1 which is VALID!
$quantity = 0 which is NOT valid :(
$quantity = 10 which is VALID!
$quantity = 11 which is NOT valid :(
$quantity = 001 which is NOT valid :(
$quantity = ,1 which is NOT valid :(

答案 1 :(得分:0)

为什么不以另一种方式攻击它?

void getRgb(GLfloat* pixels1,GLubyte* out)//convert fractional values into color
{
  for (int i = 0;i < 90*90;i++)
  {
    out[(i*3)+0] = pixels1[i]*255;
    out[(i*3)+1] = pixels1[i]*255;
    out[(i*3)+2] = pixels1[i]*255;
  }
}

//gradient generation
multiplier = new GLfloat[90*90];// calc multiplier map

for(int i = 0;i < 90;i++)//2d to 1d
{
  for (int j = 0;j < 90;j++)
  multiplier[i*90 + j] = cos((j)*(3.14/180));
}



SDL_Surface * image = SDL_CreateRGBSurface(SDL_SWSURFACE, 89, 89, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0);
GLubyte* save = new GLubyte[90*90*3];
getRgb(multiplier,save);
image->pixels = save;


std::string path = "map.bmp";
SDL_SaveBMP(image, path.c_str());
delete save;
image->pixels = NULL;
SDL_FreeSurface(image);

在您上面的第一个 if (is_int($quantity) === FALSE) // Your redirect code if (strlen(strval(intval($quantity))) != strlen($quantity)) // Your redirect code 之前添加,并解决您的“其他问题”

答案 2 :(得分:0)

你忘记了“10”

$.getJSON('sample.com/json.php', function(data){

    $.each(data, function(k,v){
     console.log(v);
    });

});

答案 3 :(得分:0)

00011所以就是这样。如果你想保留out循环和正则表达式,你可以执行以下操作。但这确实允许010011

<?php

$a_number = '0001' + 0; // type juggle (int or float)

echo '<pre>';
var_dump($a_number); // is int(1)
echo '</pre>';

  if (is_numeric($a_number) 
    && is_int($a_number) // don't allow floats
    && $a_number > 0 
    && $a_number <= 10)
  {
      var_dump($a_number);
      echo 'ok!';
      exit;
  }
  else
  {
    echo 'page.php?msg=error';
    exit;
  }