[英]Validating form text input as an integer?
我[认为?]通过$ _POST发送的所有数据都是字符串。 因此,如果我希望用户输入一个整数(在我的示例中,我要在一个框中要求用户输入小时,在另一个框中要求用户输入分钟。对于他们来说2.5小时22分钟是没有意义的),我确认吗?
我已经有一个解决方案是这样的:
if(!filter_input(INPUT_POST, 'hours', FILTER_VALIDATE_INT)) {}
还有其他/更好的方法吗?
由于$ _POST数据是字符串,所以is_numeric / is_int失败。 转换值可能会丢失数据/带来自己的问题。
这是确定输入是否为有效整数的好方法。
您是正确的, $_POST
填充的每个值都是一个字符串。
在将整数发送到PHP之前,先验证整数(通过Javascript / Jquery /另一个库)客户端。 PHP中的is_numeric应该用于测试字符串变量是否为..好吧,数字! 通常,这是测试$_POST/$_GET
变量的数字值而无需强制转换的标准方法。
每个$_POST
变量都是一个字符串,并且无需将字符串显式转换为INT,我认为您的方法是一个很好的解决方案。
您应该使用验证库。 使用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
。
如果您想自己做, Respect的int验证器将使用以下逻辑:
is_numeric($input) && (int) $input == $input;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.