Для символов ASCII вы можете использовать:
^[a-zA-Z][a-zA-Z0-9]*$ // Note you don't need the "+" after the first character group.
// or...
(?i:^[a-z][a-z0-9]*$) // Slightly shorter, albeit more unreadable, syntax (?i: ... ) makes the expression case-insensitive
Если вы хотите сопоставить пустую строку, просто оберните выражение в «(...)?», Например:
^([a-zA-Z][a-zA-Z0-9]*)?$
Если вы хотите работать в Юникоде, вы можете использовать:
^\p{L}[\p{L}\p{Nd}]*$
Unicode w. пустая строка:
^(\p{L}[\p{L}\p{Nd}]*)?$
Чтобы узнать больше о возможностях Unicode в регулярных выражениях, см. на этой странице на Regular-Expressions.info .
Редактировать
Просто собрал все возможности в одном ответе.