Входное значение false для FILTER_VALIDATE_BOOLEAN - PullRequest
3 голосов
/ 02 февраля 2012

Я хочу, чтобы ввод принимал только 'true' или 'false', поэтому я пытаюсь использовать FILTER_VALIDATE_BOOLEAN для этого,

if (!filter_var('false', FILTER_VALIDATE_BOOLEAN)) 
{
    $error = true;
    echo 'error';
}

Это повторяет сообщение об ошибке, но не должно

Как я могу сделать это правильно?

1 Ответ

15 голосов
/ 02 февраля 2012

Ознакомьтесь с инструкцией http://www.php.net/manual/en/filter.filters.validate.php

Ваш синтаксис / использование верны. filter_var('false', FILTER_VALIDATE_BOOLEAN) однако не проверяет шаблон, он преобразует входную строку в соответствующее введенное значение.

Чтобы сделать это явным:

var_dump(filter_var('false', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

Возвращает логическое значение false
.

var_dump(filter_var('true', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

Возвращает логическое значение true
.

var_dump(filter_var('wrong', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

Возвращает NULL.
Вот почему я добавил второй вариант. Входная строка не классифицируется как true и false.

Так что вам действительно нужно проверить с === NULL ваше состояние. Это даст вам результат, который вы, вероятно, хотели бы:

if (filter_var('false', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL) 
{
    echo "Input did not evaluate to boolean 'false' nor 'true'"
...