Я пытаюсь проверить поле с помощью php. Я передаю значение с помощью POST, и оно должно содержать только цифры и pipi («|»).
Я использую filter_input для проверки правильности значения:
filter_input(INPUT_POST,"q",FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^\s{0,}[0-9|]{0,}\s{0,}$/"));
Это регулярное выражение проверяет числа, «|» и необязательные пробелы до и после. Это должно также проверить пустое поле, но это не так. Если поле пустое, filter_input возвращает FALSE.
Как я могу проверить также пустое поле? Я хочу принять также пустой как действительный.
Все работает, когда дата поля компилируется. Когда дата пуста, дата не проверяется.
Ваше регулярное выражение соответствует пустой строке как есть
с вводом ничего вы не получите
string '' (length=0)
Когда ввод отсутствует, однако это другой случай.
это задокументировано
или NULL, если переменная variable_name не установлена.
http://php.net/manual/en/function.filter-input.php
приведение к строке будет «работать», так как нулевое приведение к пустой строке
так
(string) filter_input(INPUT_POST,"q",FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^\s{0,}[0-9|]{0,}\s{0,}$/"));
будет работать как вы ожидаете
литейная документация
NULL всегда преобразуется в пустую строку.
http://php.net/manual/en/language.types.string.php#language.types.string.casting
Других решений пока нет …