Как написать выражение reg для замены значения цены в указанном формате c - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу использовать регулярное выражение для представления значений в указанном формате c. Например, если пользователь вводит «1» в поле ввода, его необходимо заменить «$ 1»

, например:

  • 1234 -> $ 1,234
  • 1234,5 -> 1 234,5
  • 0,31 -> 0,31
  • 3,01 -> 3,01

Я пробовал вот так.

formatNumber = (n) => {
    console.log(n);
    return n.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

handleUserInput = (e) => {
    const name = e.target.name
    const value = e.target.value
    this.setState({ [name]: value });
    let errors = this.state.errors;
    e.target.value = '$' + this.formatNumber(value);
}

Это работает с целочисленными значениями, но не с десятичными. Я действительно ценю твою помощь. Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

Вы делаете что-то вроде этого:

const formatNumber = n => {
  const [a, ...rest] = n.toString()
  const m =
    rest.toString().length % 3 === 0 ?
    rest
    .toString()
    .replace(/\D/g, "")
    .replace(/\d{3}/g, n => `${n}.`) :
    rest.toString().replace(/\D/g, "")
  return `$${a},${m}`
}

console.log(formatNumber(1234.5))
console.log(formatNumber(1234))
console.log(formatNumber(0.31))
0 голосов
/ 10 февраля 2020

Попробуйте с помощью функции ниже. Я думаю, что это полезно для вас.

function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return '$'+ x1 + x2;
}
0 голосов
/ 10 февраля 2020

С первой заменой .replace(/\D/g, "") вы также удаляете точки. Если вы хотите сохранить точки, вы можете использовать [^\d.]+ вместо \D

Например

formatNumber = (n) => {
  return n.toString()
    .replace(/[^\d.]+/g, "")
    .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};

[
  1234,
  1234.5,
  0.31,
  3.01

].forEach(s => console.log(formatNumber(s)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...