将表单文本输入验证为整数?

时间:2012-05-31 13:04:40

标签: php validation

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

我已经有了一个解决方案:

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

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

is_numeric / is_int失败,因为$ _POST数据是一个字符串。投射该值可能会丢失数据/带来其自身的问题。

3 个答案:

答案 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变量将有truefalse,具体取决于结果。

如果你想自己做,int validator from Respect使用这个逻辑:

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