[英]is_int, is_numeric, is_float, and HTML form validation
我的HTML表单上的选择字段可能会产生1到5(整数)。 使用is_int
每次都拒绝它,因为$_POST['rating']
被视为一个字符串。
在查阅PHP手册之后,似乎is_numeric() && !is_float()
是在这种情况下验证整数的正确方法。
但我想确定,所以请确认或消除我的逻辑。
我可能会使用这样的东西:
$value = filter_var(
$_POST['rating'],
FILTER_VALIDATE_INT,
array('options' => array('min_range' => 1, 'max_range' => 5)));
如果值是非整数或超出范围, filter_var()
将返回布尔值false
,或者返回有效值本身(作为整数。)
我会使用is_numeric()
,因为用户输入总是以字符串形式出现(据我所知)。
保证某事的另一种方法是整数就是把它投出来......
$id = (int) $id;
is_int
要求输入内容是整数。 is_numeric
要求输入内容是整数或仅包含0-9
的字符串。
但是我想知道结果如果我把一个大于PHP_INT_MAX
作为参数放到上面的2个函数中。
您可以使用以下正则表达式:
preg_match('/^[0-9]{1,}$/', $value);
我确实用前导零验证数字...
您始终可以将其强制转换为int。
$rating = (int)$_POST['rating'];
这将消除验证它的需要(即使您应该始终验证表单数据)。 它可能会减少你的步骤是我得到的。
如果你想知道$_POST['rating']
在你尝试施放之前是否是一个int,请使用is_numeric()
&& !is_float()
。 这将告诉您字符串是否为int。 如果您只是转换为int并且在字符串中的第一个字母之前将所有数字都转换为int,则为非数字。
x = 457h
print (int)x
输出457
x = h56
print (int)x
输出0
如果你只测试数字(通常是整数;)),我倾向于使用ctype_digit而不是is_int。 这样,您不会通过强制转换丢失数据,您只需使用字符串:
<?php
$_POST['foo'] = '42';
echo ctype_digit( (string) $_POST['foo'] ) ? 'yep' : 'nope';
那将输出“是的”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.