В моем коде Angular TypeScript у меня есть функция для форматирования моего значения в этой модели:
1234
-> 1 234,000
Первая часть моей функции использует регулярное выражение следующим образом:
// delete 0 in string start and make 3 digits packets
cleanedValue = cleanedValue.replace(/^0+(?=\d)/, '').replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
Все в порядке, но Сонар дает мне:
Убедитесь, что используемое здесь регулярное выражение, уязвимое для суперлинейной среды выполнения из-за обратного отслеживания, не может привести к отказу в обслуживании.
Как я могу сделать это без регулярного выражения или без сонара, сообщите мне об этом предупреждении. Является ли это предупреждение действительно позитивным?
В современном JS нет необходимости в регулярном выражении.
Для форматирования номера можно использовать локаль «Франция (Швейцария)».
Примечание. Не забудьте установить minimumFractionDigits
на 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.info(formatNumber(1234)); // "1 234,000"
для меня это нормально! большое спасибо !