(^[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,1}[a-z]*$)|(^[a-z]*[0-9]{0,2}[a-z]*[0-9]{0,1}[a-z]*$)|(^[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,2}[a-z]*$)|(^[a-z]*[0-9]{0,3}[a-z]*$)
a-z
, лучше ^\d
, и плохая скорость на неудачных проверках, ибо группу слева и справа можно сформировать n способами. Вот вариант чуток улучшенный:^(?:[^\d]*\d){0,3}[^\d]*$