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);
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