Просто для майбутніх Googleр (або не обов'язково "Googlers"):
Всі рішення, згадані вище, чудові, проте RegExp може бути дуже погано використовувати у такій ситуації.
Отже, так, ви можете використовувати деякі запропоновані варіанти або навіть написати щось примітивне, але корисне, наприклад:
const strToNum = str => {
//Find 1-3 digits followed by exactly 3 digits & a comma or end of string
let regx = /(\d{1,3})(\d{3}(?:,|$))/;
let currStr;
do {
currStr = (currStr || str.split(`.`)[0])
.replace( regx, `$1,$2`)
} while (currStr.match(regx)) //Stop when there's no match & null's returned
return ( str.split(`.`)[1] ) ?
currStr.concat(`.`, str.split(`.`)[1]) :
currStr;
};
strToNum(`123`) // => 123
strToNum(`123456`) // => 123,456
strToNum(`-1234567.0987`) // => -1,234,567.0987
Використовувана тут регулярна виразка досить проста, і цикл пройде точно стільки разів, скільки потрібно, щоб виконати роботу.
І ви можете оптимізувати його набагато краще, "DRYify" код тощо.
І все-таки,
(-1234567.0987).toLocaleString();
(у більшості ситуацій) був би набагато кращим вибором.
Справа не в швидкості виконання або в сумісності браузера.
У ситуаціях, коли ви хочете показати отриманий номер користувачеві, метод .toLocaleString () дає вам наддержаву говорити однією мовою з користувачем вашого веб-сайту чи програми (незалежно від її мови та мови).
Цей метод відповідно до документації ECMAScript був запроваджений у 1999 році, і я вважаю, що причиною цього стала надія на те, що Інтернет в якийсь момент з'єднає людей у всьому світі, тому потрібні були певні інструменти "інтерналізації".
Сьогодні Інтернет дійсно з'єднує всіх нас, тому важливо пам’ятати, що світ - це складний спосіб, який ми могли б собі уявити, і що (/ майже) всі ми тут , в Інтернеті.
Очевидно, враховуючи різноманітність людей, неможливо гарантувати ідеальний UX для всіх, тому що ми розмовляємо різними мовами, цінуємо різні речі і т. Д. І саме через це ще важливіше намагатися максимально локалізувати речі. .
Отже, враховуючи, що існують певні стандарти представлення дати, часу, цифр тощо. І що у нас є інструмент для відображення цих речей у форматі, який бажає кінцевий користувач, не так вже й рідко і майже безвідповідально не використовувати цей інструмент (особливо в ситуаціях, коли ми хочемо відобразити ці дані користувачеві)?
Для мене використання RegExp замість .toLocaleString () у подібній ситуації звучить трохи схоже на створення додатку для годинника з JavaScript та жорстким кодуванням його таким чином, щоб воно відображало лише празький час (що було б зовсім марно люди, які не живуть у Празі), хоча поведінка за замовчуванням
new Date();
полягає в поверненні даних відповідно до годин кінцевого користувача.