使用PHP检查变量是不是包含正整数的最短方法?

Posted

技术标签:

【中文标题】使用PHP检查变量是不是包含正整数的最短方法?【英文标题】:Shortest way to check if a variable contains positive integer using PHP?使用PHP检查变量是否包含正整数的最短方法? 【发布时间】:2011-02-03 08:00:15 【问题描述】:

我想检查用户是否输入了一个正整数。

1    = true
+10  = true
.1   = false
-1   = false
10.5 = false


Just a positive number. 
No characters.
No special character.
No dot.
No minus sign.

我尝试了is_int() 函数,但即使是正整数,它也会返回 false。是否存在 string to int 问题?

【问题讨论】:

(相关) ***.com/questions/2524680/… “+3928742938749283479823749283749”应该返回什么? @stereofrog:文本框长度验证可能会阻止您在我的应用程序中获取此值 :) 您可能缺少立体蛙点。签名的Integer 的范围从 -2147483648 到 2147483647。在此之前或之后的所有内容在技术上都是 float @Gordon:是的,我明白了stereofrog 的观点,但我开玩笑说验证不允许你通过整数范围:) 【参考方案1】:

最简单的方法是:

if intval($x) > 0 
 echo "true"

【讨论】:

intval('1e10'); // 1 和 intval('420000000000000000000'); // 2147483647【参考方案2】:

if(!preg_match('/^[0-9]+$/', $input))

已弃用:函数 ereg() 已弃用

【讨论】:

【参考方案3】:

我会说这是最好的方法

if (is_int($num) && $num > 0)

因为类型转换为 int 非常慢。

【讨论】:

但是请记住这个答案,如果$num是一个整数字符串$num = '123'is_int($num)返回false 我使用is_numeric() 来检查给定的字符串是否为有效数字【参考方案4】:

我使用正则表达式。如果您考虑一下,非常简单。如果要使数字不是整个正整数(减号和句点),则需要更多标点符号。因此,这只是确保您拥有的唯一值是数字 0-9。

if(!ereg('^[0-9]+$', $value)) 
  $errors .= "This is not a positive whole number";

您可以在其中添加另一部分以确保它也少于一定数量的字符。希望这会有所帮助。

【讨论】:

【参考方案5】:

试试原生Filter function*

filter_var($value, FILTER_VALIDATE_INT, array(
    'options' => array('min_range' => 1)
));

* 如果您只想确保输入字符串由任意长度的数字序列组成,请使用带有 [0-9] 或 [\d+] 的正则表达式

filter_var 的示例:

var_dump( filter_var(1, FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('1', FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('+10', FILTER_VALIDATE_INT) ); // int(10)

var_dump( filter_var(.1, FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('.1', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(-1, FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('-1', FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('2147483648', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('0xFF', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(0xFF, FILTER_VALIDATE_INT) ); // int(255)

【讨论】:

那么abcd、123d、10.5和(空格)呢?? @NAVEED 自己试试然后告诉我 :) 我预测所有false 你必须等待..离开;) +1:我就是这样做的,但要记住的一件事是 0 不会验证,因为 php 会自动将其转换为 false。使用=== 避免在评估中自动进行类型转换。 我运行了 'abcd'、'123d'、10.5 和空格 (' '),它们都返回为 false,使用简单:if (filter_var($int, FILTER_VALIDATE_INT)) echo("Integer is valid"); else echo("Integer is not valid"); 【参考方案6】:

这样的事情应该可以工作。将值转换为整数并将其与其原始形式进行比较(当我们使用== 而不是=== 时,PHP 在检查相等性时会忽略类型)。然后我们知道它是一个整数,我们测试它是否 > 0。(根据您对正数的定义,您可能需要>= 0

$num = "20";

if ( (int)$num == $num && (int)$num > 0 )

【讨论】:

@NAVEED 可能是因为你在做int($num)。通过将要转换为的类型括在括号中来完成转换。在这种情况下(int)$num. (int)$num == $num (int)'abcde' == 'abcde' 将返回 true 如果我的 $num = "0.2" ;然后它返回假...我怎样才能检查小数?我的号码采用以下格式“+0.2”、“-0.8”等... 我是这样解决的:$num = (int)$num >= 0 ? (int)$num : 0;

以上是关于使用PHP检查变量是不是包含正整数的最短方法?的主要内容,如果未能解决你的问题,请参考以下文章

检查浮点变量是不是为整数的最可靠方法是啥?

用布尔值(PHP)评估数组的最短方法?

刷题日记和大于等于target的最短子数组

刷题日记和大于等于target的最短子数组

刷题日记和大于等于target的最短子数组

leetcode剑指 Offer II 008. 和大于等于 target 的最短子数组