Проверка строки на недопустимые символы с помощью регулярного выражения - PullRequest
1 голос
/ 18 мая 2009

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

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

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

Ответы [ 5 ]

15 голосов
/ 18 мая 2009

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

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

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

2 голосов
/ 18 мая 2009

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

if (preg_match("/^[a-z0-9_]+$/i", $username) )
{
    return true;
}
1 голос
/ 18 мая 2009

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

1 голос
/ 18 мая 2009

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

0 голосов
/ 18 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...