77

检查输入是否为数字的最佳方法是什么?

  • 1-
  • +111+
  • 5xf
  • 0xf

那种数字不应该是有效的。只有像这样的数字:123、012 (12),正数应该是有效的。这是我当前的代码:

$num = (int) $val;
if (
    preg_match('/^\d+$/', $num)
    &&
    strval(intval($num)) == strval($num)
    )
{
    return true;
}
else
{
    return false;
}
4

6 回答 6

76

ctype_digit正是为此目的而建造的。

于 2012-07-10T17:16:11.107 回答
45

我用

if(is_numeric($value) && $value > 0 && $value == round($value, 0)){

验证一个值是否为数字、正数和整数

http://php.net/is_numeric

我不太喜欢 ctype_digit,因为它的可读性不如“is_numeric”,而且当你真的想验证一个值是否为数字时,它实际上有更少的缺陷。

于 2012-07-10T17:18:00.620 回答
20

filter_var()

$options = array(
    'options' => array('min_range' => 0)
);

if (filter_var($int, FILTER_VALIDATE_INT, $options) !== FALSE) {
 // you're good
}
于 2012-07-10T17:19:49.087 回答
11

对于 PHP 版本 4 或更高版本:

<?PHP
$input = 4;
if(is_numeric($input)){  // return **TRUE** if it is numeric
    echo "The input is numeric";
}else{
    echo "The input is not numeric";
}
?>
于 2017-01-03T13:02:12.013 回答
10
return ctype_digit($num) && (int) $num > 0
于 2012-07-10T17:17:06.077 回答
1

最安全的方式

if(preg_replace('/^(\-){0,1}[0-9]+(\.[0-9]+){0,1}/', '', $value) == ""){
  //if all made of numbers "-" or ".", then yes is number;
}
于 2019-03-08T21:43:09.880 回答