Ari*_*osh 34 html php validation
有没有更好的方法来做到这一点?
if( $_POST['id'] != (integer)$_POST['id'] )
echo 'not a integer';
Run Code Online (Sandbox Code Playgroud)
我试过了
if( !is_int($_POST['id']) )
Run Code Online (Sandbox Code Playgroud)
但is_int()由于某种原因不起作用.
我的表格看起来像这样
<form method="post">
<input type="text" name="id">
</form>
Run Code Online (Sandbox Code Playgroud)
我研究了is_int(),似乎如果
is_int('23'); // would return false (not what I want)
is_int(23); // would return true
Run Code Online (Sandbox Code Playgroud)
我也试过了 is_numeric()
is_numeric('23'); // return true
is_numeric(23); // return true
is_numeric('23.3'); // also returns true (not what I want)
Run Code Online (Sandbox Code Playgroud)
似乎这样做的唯一方法是: [这是一种不好的方式,不要这样做,请参阅下面的注释]
if( '23' == (integer)'23' ) // return true
if( 23 == (integer)23 ) // return true
if( 23.3 == (integer)23.3 ) // return false
if( '23.3' == (integer)'23.3') // return false
Run Code Online (Sandbox Code Playgroud)
但是有一个功能可以做到吗?
只是为了澄清,我想要以下结果
23 // return true
'23' // return true
22.3 // return false
'23.3' // return false
Run Code Online (Sandbox Code Playgroud)
注意:我刚刚想出我之前提出的解决方案将为所有字符串返回true.(感谢redreggae)
$var = 'hello';
if( $var != (integer)$var )
echo 'not a integer';
// will return true! So this doesn't work either.
Run Code Online (Sandbox Code Playgroud)
这不是重复检查变量是否是PHP中的整数,因为我的整数的要求/定义不同于theres.
bit*_*ing 54
if (!ctype_digit($_POST['id'])) {
// contains non numeric characters
}
Run Code Online (Sandbox Code Playgroud)
注意:它只适用于string类型.所以你必须强制转换为string常规变量:
$var = 42;
$is_digit = ctype_digit((string)$var);
Run Code Online (Sandbox Code Playgroud)
另请注意:它不适用于负整数.如果你需要这个,你必须使用正则表达式.我发现这个例子:
编辑:感谢LajosVeres,我添加了D修饰符.所以123\n无效.
if (preg_match("/^-?[1-9][0-9]*$/D", $_POST['id'])) {
echo 'String is a positive or negative integer.';
}
Run Code Online (Sandbox Code Playgroud)
更多:使用强制转换的简单测试不起作用,因为"php"== 0是true和"0"=== 0是false!请参阅类型比较表.
$var = 'php';
var_dump($var != (int)$var); // false
$var = '0';
var_dump($var !== (int)$var); // true
Run Code Online (Sandbox Code Playgroud)
IT *_*ogs 15
尝试filter_var功能
filter_var($_POST['id'], FILTER_VALIDATE_INT);
Run Code Online (Sandbox Code Playgroud)
使用:
if(filter_var($_POST['id'], FILTER_VALIDATE_INT)) {
//Doing somethings...
}
Run Code Online (Sandbox Code Playgroud)
在PHP中,$_POST值始终是文本(string类型).
您可以将变量强制转换为整数类型,如下所示:
$int_id = (int)$_POST['id'];
Run Code Online (Sandbox Code Playgroud)
如果你确定它$_POST['id'] 应该是一个整数,这将有效.但是,如果你要绝对确保它包含只有数字,从0到9,没有其他标志或符号使用:
if( ctype_digit( $_POST['id'] ) )
{
$int_id = (int)$_POST['id'];
}
Run Code Online (Sandbox Code Playgroud)