В настоящее время я делаю свое вроде калькуляторного приложения на PHP с формой как методом ввода. Для защиты ввода я использую filter_input()
. В качестве фильтра эта функция принимает один из элементов из двух групп: FILTER_SANITIZE
и FILTER_VALIDATE
, который я должен использовать для фильтрации ввода из формы?
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_VALIDATE_FLOAT));
или
$number1 = trim(filter_input(INPUT_GET, 'number1', FILTER_SANITIZE_FLOAT));
Это зависит от того, что вам нужно или подходит для вашего приложения. Можно было бы утвердить это и сказать «Да, это (или нет) действительный float», в то время как другой очистит его для любого недопустимого значения и вернет его, а не скажет ничего, если исходный вход был действительным или не для начала.
То же самое относится к другим 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));
Возврат с вышеуказанных свалок будет
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
вернет логическое значение false
если оно не является допустимым поплавком, и фактическое значение, если оно было действительным (что является «правдивым» значением). Имейте в виду, что 0.00
будет «ложным» значением, поэтому, если вы хотите проверить, не прошла ли проверка, вы должны использовать строгое сравнение, если вход был нолем, но все еще действителен.
if (filter_var($input, FILTER_VALIDATE_FLOAT) === false) { // Oh noes! $input wasn't a valid float! }
Вы можете увидеть это сами в этой живой демонстрации .
Заключить
Если вы хотите использовать его в вычислениях, вы можете проверить его и сообщить пользователю о его недопустимом формате, но вы можете его дезинфицировать и использовать в любом случае.