Большинство ответов на этот вопрос верны, но есть альтернатива, которая (в некоторых случаях) предлагает большую гибкость, если вы хотите изменить правила позже:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
Это будет соответствовать любой последовательности буквенно-цифровых символов, но только если первая группа также соответствует всей последовательности. Это малоизвестный трюк в регулярных выражениях, который позволяет вам решать некоторые очень сложные проблемы проверки.
Например, скажем, вам нужно добавить еще одно ограничение: длина строки должна быть от 6 до 12 символов. Очевидные решения, опубликованные здесь, не сработают, но с помощью трюка с упреждением, регулярное выражение просто становится:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$