То, что BoltClock говорит, правильно. Но есть и другие проблемы с вашим регулярным выражением. Во-первых, чтобы решить вашу непосредственную проблему, вот регулярное выражение, которое проверяет имя пользователя длиной от 2 до 16 символов, состоящее только из букв, цифр, подчеркиваний, тире / дефисов и пробелов:
if (preg_match('/^[A-Za-z0-9_\- ]{2,16}$/', $string)) {
// Valid username.
}
Обратите внимание, что в предложении 'empty() ||'
нет необходимости, поскольку регулярное выражение совпадает только при наличии хотя бы двух символов.
Во-вторых, регулярные выражения очень полезны (и даже могут быть забавными! ), но если вы собираетесь их использовать, вам нужно сесть и изучить синтаксис, простой и понятный (это не так жесткий). Я настоятельно рекомендую потратить час или два на изучение основ. На сайте www.regular-expressions.info имеется отличное онлайн-руководство. Время, проведенное там, окупится много раз. Счастливое регулярное выражение!