REGEX: ^\d{1,3}(?:(?:\.\d{3})*|(?:\d{3})*)(?:,\d{1,4})?$
Explicação:
\d{1,3}: os números mais a esquerda podem ser de 0 a 999(?:(?:\.\d{3})*|(?:\d{3})*): garante que o separador de milhar seja sempre usado ou nunca. Quebrando em duas partes:(?:\.\d{3})*: ou tem um ponto seguido de 3 números repetidos de 0 a N vezes(?:\d{3})*: ou tem apenas 3 números repetidos de 0 a N vezes
(?:,\d{1,4})?: opcionalmente, ao fim da string, haverá uma vírgula seguida de 1, 2, 3 ou 4 números