I think this would work as a pure-regex solution:
^0*(1?[0-9]|20)?[0-9]{0,6}(\.[0-9]{0,8}0*)?$
This is a good starting point, but it is not perfect. (I am not going to give the solution, but I want to note it before someone starts to use it blindly based on a quick google search.)
For example it matches the input: 0000000000000000000000000000000009999999.00000000000000000000000000000000000000
0000000000000000
Also it doesn't let the "," to be used instead of ".", in some case you might want that that.