is_int,is_numeric,is_float和HTML表单验证

时间:2011-03-30 13:25:23

标签: php html validation int

我的HTML表单上的选择字段可能会产生1到5(整数)。每次使用is_int拒绝它,因为$_POST['rating']被视为字符串。

在查阅PHP手册之后,似乎is_numeric() && !is_float()是在这种情况下验证整数的正确方法。

但我想确定,所以请确认或解除我的逻辑。

7 个答案:

答案 0 :(得分:5)

我可能会使用这样的东西:

$value = filter_var(
  $_POST['rating'], 
  FILTER_VALIDATE_INT, 
  array('options' => array('min_range' => 1, 'max_range' => 5))); 
如果值为非整数或超出范围,

filter_var()将返回布尔值false,或者返回有效值本身(作为整数。)

答案 1 :(得分:4)

我会使用is_numeric(),因为用户输入总是以字符串形式出现(据我所知)。

保证某事的另一种方法是整数就是把它投出来......

$id = (int) $id;

答案 2 :(得分:1)

您可以使用以下正则表达式:

preg_match('/^[0-9]{1,}$/', $value);

我确实用前导零验证数字......

答案 3 :(得分:1)

is_int要求输入内容是整数。 is_numeric要求输入内容是整数或仅包含0-9的字符串。

但是如果我将一个大于PHP_INT_MAX的数字作为参数放入上述2个函数中,我想知道结果。

答案 4 :(得分:0)

您始终可以将其转换为int。

$rating = (int)$_POST['rating'];

这将消除验证它的需要(即使您应该始终验证表单数据)。 它可能会减少你的步骤。

答案 5 :(得分:0)

如果你想知道$_POST['rating']是否是一个int,你甚至在尝试施展之前请使用is_numeric()&& !is_float()就像你一样。这将告诉您字符串是否为int。如果您只是转换为int并且在字符串中的第一个字母变为int之前,所有数字都是非数字。

x = 457h
print (int)x

输出457

x = h56
print (int)x

输出0

答案 6 :(得分:0)

如果您只测试数字(通常是整数;)),我倾向于使用ctype_digit而不是is_int。这样,您不会通过强制转换丢失数据,只需使用字符串:

<?php
$_POST['foo'] = '42';
echo ctype_digit( (string) $_POST['foo'] ) ? 'yep' : 'nope';

那将输出“是的”。