Проверка строки для недопустимых символов с использованием регулярного выражения

Я хочу проверить a для любого незаконного символа, используя следующее регулярное выражение в PHP. По сути, я хочу разрешить только буквенно-цифровое и подчеркивание (_). К сожалению, следующий фрагмент кода, похоже, не работает должным образом. Он должен возвращать true, если в строке $ username есть какой-либо незаконный символ. Тем не менее, он по-прежнему позволяет использовать любой символ в строке. Любая идея, что не так с регулярным выражением?

if ( !preg_match("/^[-a-z0-9_]/i", $username) ) { return true; } 

Заранее спасибо.

Ваш код проверяет, не является ли первый символ недопустимым. Чтобы проверить, существуют ли какие-либо недопустимые символы, сверните свой класс символов, а не возвращайте функцию и удалите привязку:

 if ( preg_match("/[^-a-z0-9_]/i", $username) ) { return true; } 

Разумеется, вы могли бы также сократить его до /[^-\w]/ («слова» – буквы, цифры и подчеркивание), или даже просто /\W/ если вы не хотите разрешать тире.

Если $username имеет только буквенно-цифровой символ и подчеркивание, он вернет TRUE

 if (preg_match("/^[a-z0-9_]+$/i", $username) ) { return true; } 

Ваше выражение соответствует только 1 символу. Попробуйте / ^ [- a-z0-9 _] + $ / i «+» соответствует более 1 символу, а «$» – конец строки.

Вам нужно также привязать его в конце, а не просто проверять первый символ. Попробуйте "/^[-a-z0-9_]*$/i" вместо этого.

У вас нет ретранслятора для одного. Вам нужен ретранслятор, такой как +. Насколько я могу видеть, не выполняя его, вы проверяете начало строки и один символ, соответствующий a-zA-Z0-9 и _, но ничего не следуя за первым символом.