2

我有一个表格,我需要检查某些值是否为整数。这似乎出乎意料地复杂。

我试过:

if (is_int($value)) 

这不起作用:任何值都返回 false,因为文本输入总是发送一个字符串类型的变量

if (is_numeric($value))

这有效,但只检查变量是否为数字。我想知道它是否是一个整数,所以我不希望 1.3 被接受。

if (is_int( (int) $value ))

尝试使用 is_int,并强制将 $value 强制转换为整数。这也不起作用

所以,除非有其他我不知道的解决方案,我想唯一的方法是使用 ereg("^[0-9]*$",$value)

这(性能?)有什么问题吗,难道没有更直接的解决方案吗?

亲切的问候。

4

7 回答 7

4

正如mario所指出的,ctype_digit()这是单一的功能方式:

if (ctype_digit($_POST['value'])) {
  $for_santity = (int)$_POST['value'];
}

简单的。快速地。可靠的。

于 2012-11-09T16:56:46.347 回答
1

您可以避免使用正则表达式(不确定strpos它在幕后做了什么)

if(!strpos($value,'.') && is_numeric($value))  

你基本上复制了 ctype_digit()

看来我有,抱歉,PHP 不是我的母语。使用以下内容,因为我们不应该重新创建库函数:
if(ctype_digit())

于 2012-11-09T16:53:03.760 回答
1

我意识到 ctype_digit() 是最佳答案,但我发布此答案以防万一有人使用不支持该功能的 PHP 版本(例如在我的测试用例中:Ideone.com):

<?php
function testInt($a){
    if (intval($a)>0) {
        return (floatval($a)==intval($a)) ? 'true' : 'false';
    }
    return 'false';
}
?>

这适用于ctype_digit()页面上列出的示例。

这是一个在线示例:http: //ideone.com/uePQto

于 2012-11-09T17:17:48.047 回答
0

这个怎么样,

 if( is_numeric( $value ) && floor( $value ) != $value)

在这种情况下,绩效衡量太微不足道了。

于 2012-11-09T16:45:25.613 回答
0

您可以尝试定义接收到的信息的数据类型。假设您通过 POST 从表单中获取信息:

$num_val = (int) $_POST['VALUE_FROM_FORM'];

我认为 is_int 将返回正确的结果,但您必须确保收到的结果是数字。

于 2012-11-09T16:45:55.100 回答
0

在您的 PHP 中,您可以使用 来检查值preg_match,不要使用旧ereg函数,因为它们已被弃用。

$id = $_GET['id'];
if (!preg_match('/^[0-9]*$/', $id)) {
    // there was an error and the value DIDN'T pass validation
} else {
    // continue as everything was OK :)
}

您可能需要更改GETtoPOSTREQUEST适应。

于 2012-11-09T16:46:27.090 回答
0

我一直处理我期望为 1 或更多的整数的方式(即对于应该表示无符号主 INT 键的传入变量):

$var = intval($_POST['form_var']);
if($var > 0){
    echo 'Good';
}
于 2012-11-09T16:47:26.423 回答