2017-06-08 4 views
1

現在、私は計算のような形式のPHPで電卓のようなアプリを作成しています。入力を保護するために、filter_input()機能を使用しています。フィルタとして、この関数は、FILTER_SANITIZEFILTER_VALIDATEの2つのグループの要素の1つを取ります。どちらをフォームからの入力をフィルタリングする必要がありますか?FILTER_SANITIZEとFILTER VALIDATEの違いは何ですか?また、どちらを使用しますか?

$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT)); 

または

$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT)); 
+2

まあ、それを検証したいのですか、それとも消毒しますか? – Qirel

+0

私はそれが数字であることを確かめるデータを計算したい、他のタイプではない。 – spectatorx

答えて

5

それはあなたが必要なものに依存したり、本当に、あなたのアプリケーションに適しています。それを検証し、「はい、これは有効な浮動小数点です」と言うでしょうが、もう一方は許容できない値でそれをクリーンアップして返しますが、元の入力が有効だった場合は何も言わないでしょう始めることはありません。

同じことが他の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)); 

上記ダンプから復帰(PHPは、強く型付けされた言語ではないので、"0.032" == 0.032)消毒値のを返す

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あろう。
小数点をそのまま保持するFILTER_FLAG_ALLOW_FRACTIONフラグにも注意してください(そのフラグがないと、0032が返されます)。

ご覧のとおり、FILTER_VALIDATE_FLOATは有効な浮動小数点数でない場合はブール値falseを返し、有効な場合(実際の値)は実際の浮動小数点数を返します。 0.00は "偽の"値なので、の検証でが失敗したかどうかを確認するには、入力が0の場合でも厳密な比較を使用する必要があります。

if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) { 
    // Oh noes! $input wasn't a valid float! 
} 

これはlive demoでご覧になれます。あなたは計算にそれを使用したい場合は、あなたが検証にそれをしたい、そしてユーザーがそのその無効な形式を知っているが、あなたはそれがをサニタイズし、とにかくそれを使用することができますせていただく場合があります
を締結する

+2

すばらしい答えをありがとう、今私に物事はより明確です。 – spectatorx

関連する問題