Try "Breaking it out" and making it simpler with OR:
^-?((\d+)|(\d*\.\d+))$
That allows zero or one "-" followed by a valid number of some form.
If you ar egoign to use Regexes, then get a copy of
Expresso[
^] - it's free, and it examines and generates Regular expressions.