Sollte das in die Code-Library? IMO hat man das so schnell geschrieben, dass es nicht wirklich nötig ist, das aufzunehmen. Oder hast du vergessen, dein Problem zu beschreiben?
Hier aus Spaß eine vermutlich schnellere Variante, die das gleiche erledigt:
Delphi-Quellcode:
function MakeNumeric(s: string; NormalizeDecSep: Boolean=False): string;
var
i, j: Integer;
WrongDecSep: Char;
begin
j := 0;
if NormalizeDecSep then
begin
if DecimalSeparator='.' then
WrongDecSep := ','
else
WrongDecSep := '.';
end;
for i := 1 to Length(s) do
begin
if NormalizeDecSep and (s[i]=WrongDecSep) then
s[i] := DecimalSeparator;
if (s[i] >= '0') and (s[i] <= '9') {or (s[i] = '-')} or (s[i] = DecimalSeparator) then
begin
inc(j);
s[j] := s[i];
end;
end;
SetLength(s, j);
Result := s;
end;
Wenn NormalizeDecSep True ist, werden alle Kommata/Punkte durch den aktuell eingestellten DecimalSeparator ersetzt, wodurch das StringReplace eingespart wird. Man sollte natürlich, je nachdem was man machen will, noch prüfen, ob eine valide Zahl herauskommt. Und eventuell sollte man Minus-Zeichen auch zulassen (s. Code).