Ваш шаблон начинается с совпадения [a-zA-Z]
.Если не требуется, чтобы a-zA-Z был в начале, но только по крайней мере 1 раз во всем матче, если это поддерживается, вы можете использовать положительный прогноз, чтобы установить длину 6 - 100.
Тогда вы можете убедиться, что совпадение по крайней мере 1 раз по азимуту или азимуту или по специальному знаку между совпадением 0+ раз [a-zA-Z0-9_@!-]*
слева и справа:
^(?=.{6,100}$)[a-zA-Z0-9_@!-]*[a-zA-Z_@!-][a-zA-Z0-9_@!-]*$
^
Начало строки (?=.{6,100}$)
Укажите, что справа - 6 - 100 символов, за исключением новой строки [a-zA-Z0-9_@!-]*
Совпадение 0+ раз, что указано в классе символов [a-zA-Z_@!-]
Соответствует символу az или AZ или специальному символу без цифры [a-zA-Z0-9_@!-]*
Соответствует 0+ раз тому, что указано в классе символов $
Конец утверждениястрока
Regex demo
Другой вариант - положительный и отрицательный взгляд вперед, 1 для проверки длины и другой (?!\d+$)
для проверкиесли совпадение не состоит только из цифр:
^(?=.{6,100}$)(?!\d+$)[a-zA-Z0-9_@!-]+$
Regex demo