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

А вообще, если критично по скорости, можно с помощью 10 REPLACE убрать цифры и сравнить длину с длиной оригинальной строки. Возможно это будет быстрее (а возможно, и нет).
может вытащить регуляркой все цифры и посчитать длину полученной строки?