Als ich die Angabe des Dezimalseperators (Komma) berücksichtigen wollte ist mir aufgefallen, dass der Regex zu oft kompiliert wird. Das könnte bei großen Tabellen und langsamen Endgeräten ins Gewicht fallen.
Ergo hab ich das Zeug mal in eine Klasse gepackt, dann geschieht (nicht nur das, sondern auch die Kompilierung der je nach Dezimalseperator unterschiedlichen Methoden) nur einmal. Außerdem hab ich noch eine Prüfung vorgesehen, nämlich für den Fall, dass eine echte Zahl übergeben wird.
class toCleanNumber {
constructor( decSep = '.' ) {
this.search_1 = new RegExp( '&[^;]+;', 'ig' );
this.search_2 = new RegExp( '[^0-9' + decSep + ']' , 'g' );
this.decSep = decSep;
if ( '.' != this.decSep ) {
this.getFloat = function ( s ) {
if ( isNaN( s ) ) {
return parseFloat(s.replace( this.search_1, '' ).replace( this.search_2, '' ).replace( this.decSep, '.' ) );
} else {
return s;
}
}
} else {
this.getFloat = function ( s ) {
if ( isNaN( s ) ) {
return parseFloat( s.replace( this.search_1, '' ).replace( this.search_2, '' ) );
} else {
return s;
}
}
}
}
}
////////////////////////////////
//
// Test für "Zahlen" mit Komma:
//
////////////////////////////////
cleaner = new toCleanNumber( ',' );
i = 123456789;
console.log( i + ' : ' + cleaner.getFloat( i ) );
console.log();
str = '123\u00A0456\u00A0789,123 ';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();
str = '123 456 789,123';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();
str = '123 456 789,123 ';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();
////////////////////////////////
//
// Test für "Zahlen" mit Punkt:
//
////////////////////////////////
cleaner = new toCleanNumber();
i = 123456789;
console.log( i + ' : ' + cleaner.getFloat( i ) );
console.log();
str = '123\u00A0456\u00A0789.123 ';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();
str = '123 456 789.123';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();
str = '123 456 789.123 ';
console.log( str + ' : ' + cleaner.getFloat( str ) );
console.log();