Чтобы соответствовать требуемому количеству цифр и не более, посмотрите в начало шаблона от (?:\d\.?)
1 до 8 раз, а затем сопоставьте \d*(?:\.\d{1,2})?$
, чтобы найти число, которое, если содержит десятичные дроби, содержит максимум 2десятичные символы:
^-?(?=(?:\d\.?){1,8}$)\d*(?:\.\d{1,2})?$
https://regex101.com/r/rQMRVX/5
(если вам не нужно для захвата десятичной части, это может быть группа без захвата, как указано выше)