检查变量是否是自然数

时间:2011-07-03 14:09:00

标签: php numbers

我想在网站上制作出价系统。这意味着用户可以发布他们的出价(自然数)。我想确保用户不要尝试发布字符,十进制数字等。 我不想使用is_numeric函数,因为允许使用十六进制表示法。 我当时想用preg_match。但是在php.net中,这个函数的文档很少,我不知道如何使用preg_match。

那么如何使用preg_match检查变量是否是自然数?

9 个答案:

答案 0 :(得分:11)

如果您不需要小数点:ctype_digitfilter_var($var, FILTER_VALIDATE_INT) 如果你这样做:filter_var($var, FILTER_VALIDATE_FLOAT)

答案 1 :(得分:5)

ctype_digit做你想做的事:

  

检查提供的字符串中的所有字符是否为数字。

     

(在PHP 5.1.0之前,当text为空字符串时,此函数返回TRUE。)

答案 2 :(得分:1)

preg_match('/^[0-9]+$/', $var);ctype_digit

答案 3 :(得分:1)

我通常会警告不要使用正则表达式来解析数字,因为通常有比正则表达式更好的解决方案,但是既然你问,我会尝试给你一些帮助:

preg_match使用正则表达式(正则表达式)进行匹配。

您可以在http://www.regular-expressions.info/

等网站上找到有关正则表达式语法的更多信息

如果您想匹配正则表达式中的数字,可以使用[0-9]\d

如果你想匹配一个或多个任何东西,你可以使用加号。

最后,正则表达式字符串需要包含在一对字符中。选择的字符通常是斜杠(/)字符,因为某些语言特别需要此字符,但PHP也允许使用其他字符;波浪号(~)很常见。

因此,您的正则表达式字符串匹配任意数量的数字将是"/\d+/"。然后可以将其放入preg_match调用中,如下所示:

$isnumeric = preg_match("/\d+/",$input_string);

如果您有更多具体要求,可以使用{max}{min,max}替换加号来限制允许的字符数,其中'min'和'max'是前一次的次数允许匹配。因此,要允许长度为2到6位的数字,您可以使用:

$isnumeric = preg_match("/\d{2,6}/",$input_string);

如果你需要允许一个小数点,你需要知道点字符是正则表达式中的一个特殊字符(它意味着“完全匹配任何字符”),所以你需要用反斜杠转义它。

因此,正则表达式将货币金额与两位小数位相匹配,且该点之前至少有一位数字如下:

$isnumeric = preg_match("/\d+\.\d\d/",$input_string);

最后,请注意,如果字符串只是包含匹配的值,则regex将在上述所有内容中返回true。为了确保它不包含任何其他内容,您需要使用锚点字符“锚定”它到字符串的前端和末尾:^作为字符串的开头,$为了结束。

因此,对于前面的示例,如果您希望 包含十进制数字,而不是其他任何内容,则需要:

$isnumeric = preg_match("/^\d+\.\d\d$/",$input_string);

正则表达式是一个复杂的主题,但我希望这会给你一个开始。

答案 4 :(得分:1)

我知道这已经很老了但是我想分享下一个解决方案以防其他人提出这个问题。

我假设用自然数表示正整数(不包括数字0)。

function is_positive_integer( $value ) {

    // Check if is integer and greater than zero
    if( is_int( $value ) && $value > 0 ) {
        return true;
    }

    // Is not a positive integer
    else {
        return false;
    }
}

答案 5 :(得分:0)

这种取决于你对自然数的定义 - 根据不同的理论,数字零(0)确实或不算作自然数。

使用preg_match

回答有关如何解决此问题的问题

如果你想包含零,使用preg_match非常简单preg_match('^[0-9]+$', $input) 用法:

if (preg_match('^[0-9]+$', $input))
  // $input represents a non-negative numeric value
else
  // $input does not represent a non-negative numeric value

如果您不想包含零,请使用preg_match('^[1-9][0-9]*$', $input)

if (preg_match('^[1-9][0-9]*$', $input))
  // $input represents a positive numeric value
else
  // $input does not represent a positive numeric value

这就是说 - 对于您的特定问题,使用ctype_digit是一个更快的解决方案,正如其他人已经指出的那样(如果您不想允许数字为零,则必须进行第二次检查)。

答案 6 :(得分:0)

in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));

答案 7 :(得分:0)

简单的功能:

function isnature($x){
$y = ceil($x)-floor($x);
return $y == 0 ? true : false;
}

答案 8 :(得分:0)

从数学角度来看,自然数是一个正整数,包括零,因此您可以像这样检查它:

is_int($bid) && $bid >= 0