1

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

我已经有一个解决方案是这样的:

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

有没有其他/更好的方法来做到这一点?

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

4

3 回答 3

0

您应该使用验证库。使用Respect\Validation的示例:

<?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;
于 2012-05-31T14:51:29.003 回答
0

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

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

于 2012-05-31T13:07:48.900 回答
0

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

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

于 2012-05-31T13:06:27.823 回答