10

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

代码示例会很好。

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

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

9 回答 9

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';
}
于 2008-11-25T16:28:15.020 回答
7

您可能应该解释“数字”是什么意思 - 积分、浮点、指数符号等?is_numeric()会接受所有这些。

如果你想检查一个字符串除了数字之外什么都没有,那么你可以使用正则表达式,例如

/^\d+$/

如果您要使用实际值,就好像它是一个整数一样,您可能无论如何都希望通过它,如果无法解析该值intval(),它将返回- 如果是一个有效值,那么您可能会有以某种方式处理它,也许通过限制值的较低范围。00

于 2008-11-25T16:19:42.790 回答
2

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

往返服务器和返回的过程很长,可能会造成拼写错误,您可以通过让客户端浏览器事先做一些质量保证来减少服务器开销。

于 2008-11-25T18:31:37.047 回答
1

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

编辑:

$quantity == 0

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

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

或者

if ( is_int( $quantity ) ) {
...
}
于 2008-11-25T16:23:29.570 回答
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 由所有数字组成。
字符串 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
?>
于 2012-04-08T17:44:38.523 回答
0

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

于 2008-11-25T16:25:12.530 回答
0

到目前为止,tharkun 给出了最好的答案。如果您要问这样的问题,我猜您还不想开始弄乱 reg-exp。

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

祝你好运!

于 2008-11-25T17:04:42.527 回答
0

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

于 2012-04-08T15:06:53.097 回答
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;
    }
}
于 2014-07-10T09:33:28.930 回答