Ну поскольку мой пример работает за один проход одним символом, то цифра более 9 быть не может в принципе. А вот что касается минусов, то можно попробовать конечно еще добавить в ограничение и минус примерно так:
Код:
Var
s: String;
s := '';
for i := 1 to Length(Edit1.Text)
do if Edit1.Text[i] in ['0'-'9','-']
then s := s + Edit1.Text[i];
но если будет строка вида:
ABC123-321Z
то после обработки будет итоговая строка вида:
123-321
А это как-вы понимаете цифры, но не число и тогда надо отдельно обрабатывать такое исключение.