В вашем коде несколько ошибок. Кроме того, "ton\ino\"
не является допустимой строкой и [^<>?=/\]+
не является допустимым регулярным выражением, возможно, у вас есть некоторое логическое недопонимание.
Ваше регулярное выражение [^<>?=/\\]+
(здесь исправлено) будет соответствовать, если есть хотя бы один символ, который не <
, >
, ?
, =
, /
и \
. Поэтому, если есть хотя бы один такой символ, preg_match
возвращает 1
. ton\ino"
и ton?asd=3
содержат как минимум один такой символ (в обоих случаях совпадение ton
).
Исправление для этого заключается в использовании утверждений для начала и конца строки (^
и $
), чтобы разрешить только допустимые символы для всей строки:
^[^<>?=/\\]+$
Или использовать класс положительных символов [<>?=/\\]+
для сопоставления с недопустимыми символами и отрицания возвращаемого выражения preg_match
:
function validate_string ($value) {
return !preg_match("([<>?=/\\\\]+)", $value);
}
Но было бы лучше использовать белый, а не черный список.