Я понимаю, что используя белый список, он использует все в этом списке, а в черном списке он использует все, кроме того, что есть в списке.
Но что происходит после этого? Скажите, что вы используете белый список – можете ли вы предотвратить подачу ввода, если значение ввода содержит то, чего не было в белом списке?
Я знаю, что что-то вроде этого уменьшит все, что не является символом или цифрой с пробелами:
preg_replace( "/[^a-zA-Z0-9_]/", "", $stringToFilter );
Но что, если я не хочу, чтобы значение, хранящееся в базе данных, было пробелом. Есть ли способ сделать это, чтобы вместо этого появилось сообщение об ошибке? используя утверждения if, например …
Я понимаю, что используя белый список, он использует все в этом списке, а в черном списке он использует все, кроме того, что есть в списке.
preg_replace
Вы должны использовать preg_match
или filter_var
с флагом FILTER_VALIDATE_REGEXP
вместо … подробнее об этом ниже.
Но что, если я не хочу, чтобы значение, хранящееся в базе данных, было пробелом. Есть ли способ сделать это, чтобы вместо этого появилось сообщение об ошибке? используя утверждения if, например …
Вы говорите об утверждении, так что вы смотрите на: php.net/filter.filters.validate :
// false var_dump( !filter_var('string with spaces', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/[\s]+/i'))) ); // true var_dump( !filter_var('string_with_no_spaces', FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/[\s]+/i'))) );
Оберните вышеприведенное в инструкции if, и все готово.