在PHP中验证数字

时间:2012-10-05 09:39:01

标签: php validation

我正在寻找一个可以帮助我验证号码的PHP函数。 我发现PHP中的is_numeric()is_float()

这适用于数值和浮点数,但不验证负数。

我要验证的数字是 1234512345.67890-12345.6789-12345

3 个答案:

答案 0 :(得分:6)

is_numeric适用于您提供的所有输入(它也会接受1e100xff等输入。

您可能会发现使用filter_var代替它更好:

$value = filter_var($input, FILTER_VALIDATE_FLOAT);
if ($value !== false) {
    // was a valid float, do something with it
}

仍然接受1e10,但不接受0xff等。

答案 1 :(得分:5)

您可以使用is_numeric

$list = array("1e4",12345,12345.6789,0,- 12345.6789,- 12345,'0xa');

foreach ( $list as $value ) {
    var_dump(is_numeric($value));
}

输出

boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
          ^--  This should not be true 

*注意*

is_numeric并非100%可靠,您应该使用filter_var而不是Jon推荐

foreach ( $list as $value ) {
    var_dump(is_float(filter_var($value, FILTER_VALIDATE_FLOAT)));
}

输出

boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
boolean false  
         ^--  can you see its false 

答案 2 :(得分:0)

过滤器var很棒,但我遇到了一个严重的问题,它在0上返回false,所以这将解决这个问题。 它接受所有实数,因此als在'0xa'

上返回false
  

(filter_var($ n,FILTER_VALIDATE_FLOAT)||($ n === 0)||($ n ==='0'));

如果你只想要整数

  

(filter_var($ i,FILTER_VALIDATE_INT)||($ i === 0)||($ i ==='0'));