我使用以下代码检查验证数字$_GET['id']
:
$id = isset($_GET['id']) && !empty($_GET['id']) && $_GET['id'] > 0 ? (int) $_GET['id'] : 0;
if($id){
echo "True";}
else{
echo "false";
}
输出:
ID RESULT
1 => TRUE
" => FALSE
<SCRIPT> => FALSE
1.5 => TRUE
如果id = 1.5,则结果为TRUE !!
如何防止这个和安全ID仅为有效号码?!
答案 0 :(得分:1)
使用filter_var
功能:
var_dump(filter_var(1, FILTER_VALIDATE_INT)); // int(1)
var_dump(filter_var('1', FILTER_VALIDATE_INT)); // int(1)
var_dump(filter_var(1.5, FILTER_VALIDATE_INT)); // bool(false)
var_dump(filter_var('1.5', FILTER_VALIDATE_INT)); // bool(false)
var_dump(filter_var('<script></script>', FILTER_VALIDATE_INT)); // bool(false)
如果您只想要数字gt然后为0,请使用options
参数:
$options = array('options' => array('min_range' => 1));
var_dump(filter_var(-100, FILTER_VALIDATE_INT, $options)); // bool(false)
var_dump(filter_var(0, FILTER_VALIDATE_INT, $options)); // bool(false)
答案 1 :(得分:-1)
我更喜欢使用ctype_digit(仅适用于字符串,它可以使用$ _GET)。
<?php
$id = $_GET['id'];
if (ctype_digit($id)) {
echo 'ok';
} else {
echo 'nok';
}
?>
或者你可以试试这个:
$expr = '/^[1-9][0-9]*$/';
if (preg_match($expr, $id) && filter_var($id, FILTER_VALIDATE_INT)) {
echo 'ok';
} else {
echo 'nok';
}