繁体   English   中英

is_int,is_numeric,is_float和HTML表单验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM