preg_match('/^[\w]{4,35}$/i', $username)
ОК, давайте посмотрим, что это не работает:
Соответствует началу строки, за которым следует [a-zA-Z0-9_] не менее 4 раз, максимум 35 раз Это сильно отличается от ваших требований.
Вместо того, что вы должны использовать:
/^[a-zA-Z][-,.\w]{3,34}$/
Модификатор чувствительности к регистру i не нужен. Также я не думаю, что это именно то, что вы хотите. Обычно вам нужно указать минимальную длину, которую вы не делаете. Это может соответствовать "а", например ( не хорошее имя пользователя )