Я хочу проверить 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 и _, но ничего не следуя за первым символом.