我[想想?]通过$ _POST发送的所有数据都是一个字符串。因此,如果我希望用户输入一个整数(根据我的例子,我要求用户在一个盒子中花费数小时,在另一个盒子中花费几分钟。他们说2.5小时22分钟没有意义),怎么能我验证了吗?
我已经有了一个解决方案:
if(!filter_input(INPUT_POST, 'hours', FILTER_VALIDATE_INT)) {}
还有其他/更好的方法吗?
is_numeric / is_int失败,因为$ _POST数据是一个字符串。投射该值可能会丢失数据/带来其自身的问题。
答案 0 :(得分:0)
这是确定输入是否为有效整数的好方法。
你是正确的,$_POST
中填充的每个值都是一个字符串。
答案 1 :(得分:0)
在将整数(通过Javascript / Jquery /另一个库)客户端发送到PHP之前验证它。 PHP中的is_numeric应该用于测试字符串变量是否为..好吧,数字!这通常是在不进行强制转换的情况下测试$_POST/$_GET
变量的数值的标准方法。
每个$_POST
变量都是一个字符串,并且没有显式地将您需要的字符串转换为INT,我认为您的方法是一个很好的解决方案。
答案 2 :(得分: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
变量将有true
或false
,具体取决于结果。
如果你想自己做,int validator from Respect使用这个逻辑:
is_numeric($input) && (int) $input == $input;