使用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检查变量是不是包含正整数的最短方法?的主要内容,如果未能解决你的问题,请参考以下文章