我需要能够查看 PHP 中的表单输入是否为数字。如果它不是数字,则网站应重定向。我试过 is_numeric() 但它似乎不起作用。
代码示例会很好。
我正在开发一个接受整数值作为数量的购物车。我正在尝试这个:
if(!is_numeric($quantity)){
//redirect($data['referurl']."/badinput");
echo "is not numeric";
}
我需要能够查看 PHP 中的表单输入是否为数字。如果它不是数字,则网站应重定向。我试过 is_numeric() 但它似乎不起作用。
代码示例会很好。
我正在开发一个接受整数值作为数量的购物车。我正在尝试这个:
if(!is_numeric($quantity)){
//redirect($data['referurl']."/badinput");
echo "is not numeric";
}
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';
}
您可能应该解释“数字”是什么意思 - 积分、浮点、指数符号等?is_numeric()
会接受所有这些。
如果你想检查一个字符串除了数字之外什么都没有,那么你可以使用正则表达式,例如
/^\d+$/
如果您要使用实际值,就好像它是一个整数一样,您可能无论如何都希望通过它,如果无法解析该值intval()
,它将返回- 如果是一个有效值,那么您可能会有以某种方式处理它,也许通过限制值的较低范围。0
0
使用 JavaScript 对输入进行一些客户端验证也可能是明智的。
往返服务器和返回的过程很长,可能会造成拼写错误,您可以通过让客户端浏览器事先做一些质量保证来减少服务器开销。
检查is_int和is_numeric。每个链接中都有示例。如果您需要更多帮助,我会发布您遇到问题的数据和代码示例。
编辑:
$quantity == 0
将始终是数字,因为它将返回一个布尔值(1 或 0)。正确的做法是:
if ( is_numeric( $quantity ) ) {
...
}
或者
if ( is_int( $quantity ) ) {
...
}
另一种选择是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
?>
Rob 所说的,虽然不是使用正则表达式来检查数字,但我会使用ctype_digit
到目前为止,tharkun 给出了最好的答案。如果您要问这样的问题,我猜您还不想开始弄乱 reg-exp。
重新思考你的逻辑。为什么要检查 $quantity==0 是否为数字结果?如果您试图避免错误 b/c,您认为数量可能没有指定值,那么您检查的时间有点晚。这是您的应用程序中一个非常常见(和邪恶)的安全漏洞——如果 $quantity 具有完全从用户输入派生的值,请确保在输入到达执行点之前对其进行清理。作为问题的一小部分,您不需要分配默认值,因为您之前已对输入进行了清理(而清理是您处理“无输入”情况的地方)。
祝你好运!
使用正则表达式:/^\d+$/
应该可以解决问题
试试这个:
$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;
}
}