PHPvalidation整数

我很想知道为什么这不起作用

echo gettype($_GET['id']); //returns string if(is_int($_GET['id'])) { echo 'Integer'; } 

如果validation数据从GET / POST传递,如果它是整数?

手册说:

要testing一个variables是一个数字还是一个数字string(比如表单input,总是一个string),您必须使用is_numeric()。

另外,你可以使用基于正则expression式的testing:

 if(preg_match('/^\d+$/',$_GET['id'])) { // valid input. } else { // invalid input. } 

可以使用

 $validatedValue = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); 

http://php.net/filter_input和相关的function。;

intval呢?

 $int = intval($_GET['id']); 

要将表单数据(string)validation为整数,应该使用ctype_digit()如果string文本中的每个字符都是十进制数字,则返回TRUE否则返回FALSE 。 (PHP 4> = 4.0.4,PHP 5)

参考: http : //php.net/manual/en/function.ctype-digit.php

这听起来像你正在检查一个string是否包含一个整数,而不是如果该variables一个整数。 如果是这样,你应该检查php的正则expression式(正则expression式)function。 它允许你检查string中的非常特定的模式来validation它的任何标准。 (如它只包含数字字符)

这里的PHP页面http://php.net/manual/en/function.preg-match.php

这里是正则expression式的备忘单(使$模式string) http://regexpr.com/cheatsheet/

尝试:

 if(isNumeric($_GET['id'])) { $cast_int = (int)$_GET['id']; } if(isset($cast_int)) { echo gettype($cast_int)."<br />\n"; if(is_int($cast_int)) { echo 'Integer'."<br />\n"; } } else { echo gettype($_GET['id'])." was passed<br />\n"; } function isNumeric($numeric) { return preg_match("/^[0-9]+$/", $numeric); } 

我采取了一个稍微偏执狂的方法来消毒GETinput

 function sanitize_int($integer, $min='', $max='') { $int = intval($integer); if((($min != '') && ($int < $min)) || (($max != '') && ($int > $max))) return FALSE; return $int; } 

为了更安全,您可以先提取数字,然后运行上面的函数

 function sanitize_paranoid_string($string, $min='', $max='') { $string = preg_replace("/[^a-zA-Z0-9]/", "", $string); $len = strlen($string); if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max))) return FALSE; return $string; } 

代码来自: http : //libox.net