目前我在PHP中使用表单作为输入方法制作类似计算器的应用程序.为了确保输入,我正在使用filter_input()功能.作为过滤器,此函数从两组中获取一个元素:FILTER_SANITIZE并且FILTER_VALIDATE,我应该使用哪一个来过滤来自表单的输入?
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT));
Run Code Online (Sandbox Code Playgroud)
要么
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT));
Run Code Online (Sandbox Code Playgroud)
Qir*_*rel 15
这取决于您的需求或适合您的应用,真的.一个人会验证它,并说"是的,这是(或不是)一个有效的浮动",而另一个会清除它的任何不可接受的值并返回,并且如果原始输入有效或者没有说什么不要一开始.
这同样适用于其他FILTER_SANITIZE_*和FILTER_VALIDATE_*常量,但在这个例子中,我们将看原始问题中提到的浮点验证和卫生.
让我们来看看!
$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));
Run Code Online (Sandbox Code Playgroud)
从上面的转储返回将是
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
Run Code Online (Sandbox Code Playgroud)
FILTER_SANITIZE_NUMBER_FLOAT将返回一个已清理值的字符串(PHP不是强类型语言,所以"0.032" == 0.032).
您还应该注意该FILTER_FLAG_ALLOW_FRACTION标志,它保持小数位(没有它将返回的标志0032).
正如您所看到的,如果它不是有效的float,则FILTER_VALIDATE_FLOAT返回一个布尔值,false如果它是有效的,则返回实际的浮点值(这是一个"真实的"值).请记住,这0.00将是一个"虚假"值,因此如果您想检查验证是否失败,您应该使用严格比较,以防输入为零,但仍然有效.
if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) {
// Oh noes! $input wasn't a valid float!
}
Run Code Online (Sandbox Code Playgroud)
你可以在这个现场演示中亲眼看到它.
总结
如果你想在计算中使用它,你可能想要验证它,并让用户知道它的格式无效,但你可以清理它,并且无论如何都要使用它.
其他过滤器
此处的检查显示了其用途FILTER_SANITIZE_FLOAT,但还有其他验证和santation过滤器.有关完整说明,请参阅以下链接.