这取决于您需要什么或适合您的应用程序,真的。一个人会验证它,然后说“是的,这是(或不是)一个有效的浮点数”,而另一个人会清理它以获得任何不可接受的值并返回它,如果原始输入是有效的,或者不说什么不要开始。
这同样适用于其他 FILTER_SANITIZE_* 和 FILTER_VALIDATE_*constants,但在本例中,我们将研究浮点验证和清理,正如原始问题中所问的那样。
一起来看看吧!
$float = 0.032;
$not_float = "0.03b2";
var_dump(filter_var($float, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
var_dump(filter_var($not_float, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
var_dump(filter_var($float, FILTER_VALIDATE_FLOAT));
var_dump(filter_var($not_float, FILTER_VALIDATE_FLOAT));
上述转储的回报将是
string(5) "0.032" // $float FILTER_SANITIZE_NUMBER_FLOAT
string(5) "0.032" // $not_float FILTER_SANITIZE_NUMBER_FLOAT
float(0.032) // $float FILTER_VALIDATE_FLOAT
bool(false) // $not_float FILTER_VALIDATE_FLOAT
FILTER_SANITIZE_NUMBER_FLOAT 将返回经过清理的值的 字符串(PHP 不是强类型语言,因此 "0.032" == 0.032)。
您还应该注意 FILTER_FLAG_ALLOW_FRACTION 标志,它将小数点保留在原位(如果没有该标志,它将返回 0032)。
如您所见,如果 FILTER_VALIDATE_FLOAT 不是有效浮点数,则任何 FILTER_VALIDATE_FLOAT 都会返回布尔值,如果有效则返回实际浮点值(这是一个“真实”值)。请记住,0.00 将是一个“虚假”值,因此如果您想检查验证是否失败,您应该使用严格比较,以防输入为零但仍然有效。
if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) {
// Oh noes! $input wasn't a valid float!
}
您可以在live demo 中亲自查看。
总结
如果您想在计算中使用它,您可能需要验证它,并让用户知道它的格式无效,但您可以清理它,并使用它.
其他过滤器
此处的示例显示了FILTER_SANITIZE_FLOAT 的用法,但还有其他验证和验证过滤器。有关完整说明,请参阅以下链接。