如何在PHP中检查表单输入是否为数字?

时间:2008-11-25 16:16:26

标签: php validation numeric

我需要能够看到PHP中的表单输入是否为数字。如果它不是数字,则网站应重定向。我尝试过is_numeric()但它似乎不起作用。

代码示例很不错。

我正在开发一个接受数量整数值的购物车。我正在尝试这个:

if(!is_numeric($quantity)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";
        }

9 个答案:

答案 0 :(得分:14)

if(!is_numeric($quantity == 0)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";

这里有两个嵌套条件。 假设$ quantity是1。

第一个条件评估1 == 0并返回FALSE。 第二个条件检查FALSE是否为数字并返回FALSE,因为FALSE不是数字。

只写:

if (!is_numeric($quantity))
{
    echo 'is not numeric';
}

答案 1 :(得分:7)

你应该用“数字”解释你的意思 - 积分,浮点数,指数表示法等? is_numeric()将接受所有这些。

如果要检查字符串是否只包含数字,则可以使用正则表达式,例如

/^\d+$/

如果您要将实际值用作整数,那么您可能希望无论如何都要通过intval(),如果无法解析该值,则会返回0 - 如果0是有效值,那么您可能必须以某种方式处理它,可能是通过约束值的较低范围。

答案 2 :(得分:2)

使用JavaScript对输入进行客户端验证可能也是明智的。

服务器和返回的往返是一个很长的可能相当于打字错误,并且您将通过使客户端浏览器事先做一些质量保证来减少服务器开销。

答案 3 :(得分:1)

检查is_intis_numeric。每个链接都有一些例子。如果您需要更多帮助,我会发布您遇到问题的数据和代码示例。

编辑:

$quantity == 0

将始终为数字,因为它将返回布尔值(1或0)。这是正确的做法:

if ( is_numeric( $quantity ) ) {
...
}

if ( is_int( $quantity ) ) {
...
}

答案 4 :(得分:1)

另一种选择是ctype_digit。来自文档:

Checks if all of the characters in the provided string, text, are numerical. Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>
  

上面的例子将输出:
  字符串1820.20不包含   所有数字。
  字符串10002由所有数字组成   该   string wsl!12不包含所有数字。

<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>

答案 5 :(得分:0)

Rob说,虽然不是使用正则表达式来检查数字,但我会使用ctype_digit

答案 6 :(得分:0)

到目前为止,tharkun有最好的答案。如果你问这样的问题,我猜你真的不想开始搞乱reg-exp了。

重新思考你的逻辑。为什么要检查$ quantity == 0是否为数字结果?如果您试图避免错误b / c,您认为数量可能没有指定值,那么您需要稍微检查一下。这是您应用程序中非常常见(和邪恶的)安全漏洞 - 如果$ quantity具有从用户输入中获得的值,请确保在输入到达执行点之前清理输入。作为问题的一小部分,您不需要分配默认值,因为您之前已清理过您的输入(并且清理是您处理“无输入”情况的地方)。

祝你好运!

答案 7 :(得分:0)

使用正则表达式:/^\d+$/应解决问题

答案 8 :(得分:0)

试试这个:

$numeric = "1"; //true default

$string = trim($_GET['string']);

$chkarray = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".");

for ($i=0; $i < strlen($string); $i++) { 
    if (!in_array(substr($string, $i, 1), $chkarray)) {
        $numeric = "0";
        break;
    }
}