Посыпьте в некоторый положительный lookahead , чтобы проверить общую длину строки, например
/^(?=.{3,16}$)[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/