我的HTML表单上的选择字段可能会产生1到5(整数)。每次使用is_int
拒绝它,因为$_POST['rating']
被视为字符串。
在查阅PHP手册之后,似乎is_numeric() && !is_float()
是在这种情况下验证整数的正确方法。
但我想确定,所以请确认或解除我的逻辑。
答案 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';
那将输出“是的”。