我有一个简单的函数,用于检查值是否为数字以及该数字是否小于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";
}
这个功能很好用,直到传递特殊数字,例如:
这些值仍然会使函数返回“成功值”。
在我的情况下,如何使这些特殊数字不会返回误报。
感谢。
答案 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";
}
答案 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")){
检查字符串化后数字表示是否仍然相同。