检查正整数(PHP)的最佳方法是什么?
我需要检查一个表单输入值是一个正整数(不只是一个整数),我注意到另一个代码片段使用下面的代码:
$i = $user_input_value;
if (!is_numeric($i) || $i < 1 || $i != round($i)) {
return TRUE;
}
我想知道使用上面的三个检查是否有任何好处,而不仅仅是这样做:
$i = $user_input_value;
if (!is_int($i) && $i < 1) {
return TRUE;
}
没有找到相关结果
已邀请:
20 个回复
超可林
也会返回true,但如果$ i是一个整数,则
只返回true,而如果$ i是整数字符串则不返回true。这就是为什么你应该使用第一个代码片段,如果你还想要返回true,如果$ i是一个整数字符串(例如,如果$ i ==“19”而不是$ i == 19)。 有关更多信息,请参阅这些参考 php is_numeric函数 php is_int函数
悍蕾驮苇袜
您还可以添加最大值。
http://php.net/manual/en/function.filter-var.php http://www.php.net/manual/en/filter.filters.validate.php
缮淳彼誊
如果值类型为
,则
将返回true。如果类型为
,则
将返回true,但字符串的值为整数。 此检查与
之间的区别在于,即使对于表示非整数的数值(例如“+0.123”),
也将返回true。
舜辉
然后,我对整数和字符串值运行了上述测试 选项1:简单的铸造/等效测试 整数:0.3秒 字符串:0.4秒 选项2:使用is_int()和ctype_digit() 整数:0.9秒 字符串:1.45秒 选项3:正则表达式 整数:1.83秒 字符串:1.60秒 也许不出所料,选项1是迄今为止最快的,因为没有函数调用,只是转换。值得注意的是,与其他方法不同,选项1将string-float-integer值“5.0”视为整数:
对于您的特定用例而言,这是否是一件好事还是留给读者的练习......
笛驮型迸
如果你能检查$ i> 0是否更好。
痰降锭骂奸
。它查找仅包含数字的字符串。
渐首洽陈染
然后... !is_numeric($ i)|| $ i&lt; 1 || $ i!= round($ i)等于 !A || B || !C 所以:
现在,使用deMorgan定理,即(!A ||!C)=(A&amp;&amp; C),然后:
现在,请注意A&amp;&amp; C = is_numeric($ i)&amp;&amp; $ i == round($ i),但如果$ i == round($ i)为TRUE,则is_numeric($ i)也为TRUE,因此我们可以简化A&amp;&amp; C = C所以, (A&amp;&amp; C)|| B = C || B =
所以你只需要使用:
掸牛浓疗
e.g:20,2.6,06
降女陷费券
或
与多个条件,如:
您可以通过将输入转换为
来简化此操作,以便一个
调用将同时检查
和
输入:
良阑纠苫
来验证输入是一个整数,而不是一个不同的数值(即:十进制)。 如果传递一个字符串,is_int将返回false。有关is_int的信息,请参阅PHP手册示例
习让休堂溯
如果你想限制长度:
所以pisitive int的最大长度为6:
翱抹村
有关
和
之间差异的更多信息,请查看Sören的答案
末钉蹈泰唬
要么
使用符合您目的的那个,因为它们是相同的。以下示例演示了
和
之间的区别:
磐去裸猜饲
盛梯獭八搽
将输出:
请参阅http://php.net/manual/en/function.gmp-sign.php上的功能手册 附:您需要在.ini文件中启用php_gmp.dll。
咳累录酬
敦肌
玖料萄
拟蓬
根据前面的减号,该数字被转换为正数或负数。然后将类型转换数大于0以确定该数字是否为正数。
谷靛
我检查字符串是否为数字,第二次检查确定它是整数,第三次确定它是正数