PHP检查特殊号码

时间:2014-06-06 08:39:06

标签: php

我有一个简单的函数,用于检查值是否为数字以及该数字是否小于0.

function check_number($value){

    if(!is_numeric(strval($value))){
        return "value must be whole or decimal";
    } else {
        if($value < 0){
            return "value must be bigger than 0";
        }
    }

    return "successful value";
}

这个功能很好用,直到传递特殊数字,例如:

  • 0xf4c3b00c
  • 1E7

这些值仍然会使函数返回“成功值”

在我的情况下,如何使这些特殊数字不会返回误报。

感谢。

3 个答案:

答案 0 :(得分:3)

function check_number($value){

    if (!is_numeric($value)) {
        return "That is not a number";
    }
    if ($value < 0) {
        return "value must be bigger than 0";
    }
    if(!ctype_digit(str_replace('.', '', $value))){
        return "value must be whole or decimal";
    }

    return "successful value";
}

SEE DEMO

答案 1 :(得分:1)

你有特殊的要求。您对数字的定义与PHP不同 - 4.1e7是一个数字,而不是以您喜欢的方式格式化的数字。因此,您需要查看显示的数字 - 作为字符串。

首先检查值是否小于0,因为稍后我们不会区分减号和任何其他字符。

计算数字字符串中的点数。

如果超过1个点,则返回失败。

如果只有1个点,则str_replace它并继续。

最后,在剩下的字符串上使用ctype_digit。

答案 2 :(得分:0)

更改

if(!is_numeric(strval($value))){

$value = trim($value, "0"); // get value as string and remove leading and trailing zeroes
$value_float = ltrim(floatval($value), "0"); // get float value as string and remove leading zero
if($value !== $value_float){

或使其更紧凑

if(trim($value, "0") !== ltrim(floatval($value), "0")){

检查字符串化后数字表示是否仍然相同。