验证表单文本输入为整数


Validating form text input as an integer?

我认为?通过$_POST发送的所有数据都是一个字符串。因此,如果我希望用户输入一个整数(根据我的示例,我要求用户在一个框中输入小时,在另一个框中输入分钟。他们说 2.5 小时 22 分钟是没有意义的),我该如何验证?

我已经有一个解决方案,那就是:

if(!filter_input(INPUT_POST, 'hours', FILTER_VALIDATE_INT)) {}

还有其他/更好的方法吗?

is_numeric/is_int失败,因为 $_POST 数据是一个字符串。转换值可能会丢失数据/带来自己的问题。

这是确定输入是否为有效整数的好方法。

您是正确的,填充$_POST中的每个值都将是一个字符串。

在将整数发送到PHP之前,验证整数(通过Javascript/Jquery/另一个库)客户端。 PHP 中的is_numeric应该用于测试字符串变量是否是 .. 好吧,数字!这通常是在不强制转换的情况下测试$_POST/$_GET变量的数值的标准方法。

每个$_POST变量都是一个字符串,并且没有将您需要的字符串显式转换为 INT,我认为您的方法是一个很好的解决方案。

您应该使用验证库。使用尊重''验证的示例:

<?php
use Respect'Validation'Validator as v;
$isFormValid = v::key('hours', v::int()->between(0,23))
                ->key('minutes', v::int()->between(0,59))
                ->validate($_POST);

$isFormValid变量将具有truefalse,具体取决于结果。

如果你想自己做,来自 Respect 的 int 验证器使用以下逻辑:

 is_numeric($input) && (int) $input == $input;