繁体   English   中英

使用is_numeric验证表单输入中的整数

[英]Validate Integer in Form Input Using is_numeric

在我的表单中,输入团队的分数,并通过PHP脚本进行验证,然后将其传递到MySQL数据库。 但是,我想确保提交的是正整数,因此在列出联盟排名时,后端没有问题。

研究得出的结论是,使用is_numeric将是实现此目的的最佳方法。 但是,它无法将零识别为整数,这给我带来了问题。 当我单独在数组中回显它时,它显示为true,但是有关我在脚本中编写它的方式的某些操作无效。

我尝试先用intval转换$ _POST,然后用is_numeric处理数字,但这似乎无济于事。 这是代码:

// Validate the away score:
if (empty($_POST['away_score'])) {
    echo "You forgot to enter the away score.<br>";
    $validate = 'false';
} elseif (!is_numeric($_POST['away_score'])) {
    echo "You entered an invalid score for the away team.<br>";
    $validate = 'false';
} else {
    $away_score_value = mysqli_real_escape_string($db, trim($_POST['away_score']));
    $validate = 'true';
}

有什么想法吗?

字符串'0'不正确。 这意味着以布尔值方式检查它的任何内容都将其视为错误。 特别是, empty($_POST['away_score'])计算结果为true ,因此is_numeric甚至都不会失败。

简短的版本:在这种情况下, empty太浪费了。 明确检查null和''

if (!isset($_POST['away_score']) or $_POST['away_score'] == '') {

您可以使用内置验证。 验证示例中探索几个示例 并了解有关filter_input的信息

例如。

var_dump(filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, array(
    'options' => array(
        'min_range' => 1,
        'max_range' => 5,
    )
)));

PS使用准备好的语句。

<?php

try {

    // Check if user submitted "away_score" with valid form.
    // "away_score" can be UNDEFINED or STRING or ARRAY.
    if (!isset($_POST['away_score']) || !is_string($away_score = $_POST['away_score'])) {
        throw new RuntimeException('You cannot access without valid form submitting.');
    }
    // If "away_score" is not filled in, this will be EMPTY STRING.
    if ($away_score === '') {
        throw new RuntimeException('You forgot to enter the away score.');
    }
    // Check if trimmed "away_score" has only digits.
    if (!ctype_digit($away_score = trim($away_score))) {
        throw new RuntimeException('You entered an invalid score for the away team.');
    }

    // do something

} catch (Exception $e) {

    printf("<p>%s</p>\n", $e->getMessage());

}
ctype_digit( (string) $score);

preg_match('#^\d+$#', $score);

在b4 @EmilioGort

boolean false

int 0

使用正则表达式

if (preg_match('/\A\d++\z/', $variable)){//including 0
 //do somthing
}else{
 echo "This is not a Positive Integer"
}

is_numeric(4.2)使用float返回true

如果数据是使用$_POST$_GET类的is_int(2)获得的,则is_int(2)返回false

} elseif (!preg_match('/^([0-9]+)$/', $_POST['away_score'], $m)) {
  $AwayScore = $m[1];  # $AwayScore to go to mysql
  echo 'not numeric!';
  $valid = false;
}

这样就行了!
preg_match()适用于任何类型, 包括integer / long / float ,任何东西!

但是使用is_numeric 检查PHP中给定输入是否为数字的正确方法,并且

var_dump(is_numeric(0));

应该返回bool(true) 您是否尝试过is_int

elseif (!is_numeric(POST[$_'$away_score']) && !is_null(POST[$_'$away_score']))

因为0(或null)不是数字值,所以您必须检查分数是否不为null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM