angular - Formatera tusentalsavgränsare korrekt utan regex
I min Angular TypeScript-kod har jag en funktion för att formatera mitt värde i denna modell:
1234 -> 1 234,000
Första delen av min funktion använder regex så här:
// delete 0 in string start and make 3 digits packets
cleanedValue = cleanedValue.replace(/^0+(?=\d)/, '').replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
Det är okej men Sonar ger mig en:
Se till att det regex som används här, som är sårbart för superlinjär körtid på grund av backtracking, inte kan leda till tjänsteavbrott.
Hur kan jag göra detta utan regex eller utan att Sonar ger mig denna varning. Är denna varning verkligen positiv?
Svar #1
Ingen behöver för ett reguljärt uttryck i modern JS.
Du kan använda det franska (Schweiz) språkområdet för att formatera numret.
Notera: Glöm inte att sätta minimumFractionDigits till 3.
// Number formatter for French (Switzerland)
const frechSwissNumberFormatter = Intl.NumberFormat('fr-CH', {
minimumFractionDigits: 3
});
// Convenience function
const formatNumber = (n) => frechSwissNumberFormatter.format(n)
// Format the number and print it
console.log(formatNumber(1234)); // "1 234,000"