我认为?通过$_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
变量将具有true
或false
,具体取决于结果。
如果你想自己做,来自 Respect 的 int 验证器使用以下逻辑:
is_numeric($input) && (int) $input == $input;