Как правильно отформатировать валюту с помощью jquery? - PullRequest
71 голосов
/ 18 февраля 2011

Мне не нужна маска, но мне нужно что-то, что будет форматировать валюту (во всех браузерах) и не позволять вводить буквы или специальные символы Спасибо за помощь

Пример:

Действительный: $ 50,00
$ 1,000.53

Недействительно: $ w45.00
$ 34.3r6

Ответы [ 8 ]

91 голосов
/ 06 июня 2013

Другой вариант (если вы используете просмотр бритвы ASP.Net): «На вашем представлении вы можете сделать

<div>@String.Format("{0:C}", Model.total)</div>

».примечание (item.total - двойной / десятичный)

, если в jQuery вы также можете использовать Regex

$(".totalSum").text('$' + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());
47 голосов
/ 18 февраля 2011

ФОРМАТИВНЫЙ ПЛАГИН JQUERY
http://code.google.com/p/jquery-formatcurrency/

34 голосов
/ 20 мая 2014

Расширяя ответ Melu, вы можете сделать это, чтобы функционализировать код и обрабатывать отрицательные суммы.

Пример вывода:
5,23 $
- $ 5,23

function formatCurrency(total) {
    var neg = false;
    if(total < 0) {
        neg = true;
        total = Math.abs(total);
    }
    return (neg ? "-$" : '$') + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString();
}
19 голосов
/ 12 марта 2012

Как следствие того, что плагин jQuery FormatCurrency является хорошим ответом, я хотел бы опровергнуть ваш комментарий:

1. code.google.com/p/jquery-formatcurrency - не отфильтровывает все письма. Вы можете ввести одну букву, и она не будет удалена.

Да, formatCurrency () сама по себе не отфильтровывает буквы:

// only formats currency
$(selector).formatCurrency();

Но toNumber (), включенный в плагин formatCurrency, делает.

Таким образом, вы хотите сделать:

// removes invalid characters, then formats currency
$(selector).toNumber().formatCurrency();
15 голосов
/ 18 июля 2014

Используйте jquery.inputmask 3.x . Смотрите демоверсии здесь

Включать файлы:

<script src="/assets/jquery.inputmask.js" type="text/javascript"></script>
<script src="/assets/jquery.inputmask.extensions.js" type="text/javascript"></script>
<script src="/assets/jquery.inputmask.numeric.extensions.js" type="text/javascript"></script>

И код как

$(selector).inputmask('decimal',
  { 'alias': 'numeric',
    'groupSeparator': '.',
    'autoGroup': true,
    'digits': 2,
    'radixPoint': ",",
    'digitsOptional': false,
    'allowMinus': false,
    'prefix': '$ ',
    'placeholder': '0'
  }
);

Основные характеристики:

  • прост в использовании
  • необязательные части в маске
  • возможность определять псевдонимы, которые скрывают сложность
  • Маски даты / даты и времени
  • числовые маски
  • много обратных вызовов
  • нежадные маски
  • многие функции могут быть включены / отключены / настроены с помощью параметров
  • поддерживает атрибуты readonly / disabled / dir = "rtl"
  • поддержка атрибутов ввода-ввода масок
  • поддержка нескольких масок
  • поддержка регулярных выражений
  • поддержка динамической маски
  • поддержка маски предварительной обработки
  • форматирование / проверка значения без элемента ввода
7 голосов
/ 02 июня 2016

Раньше я использовал плагин валюты формата jquery, но в последнее время он очень глючит. Мне нужно только форматирование для USD / CAD, поэтому я написал собственное автоматическое форматирование.

$(".currencyMask").change(function () {
            if (!$.isNumeric($(this).val()))
                $(this).val('0').trigger('change');

            $(this).val(parseFloat($(this).val(), 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());
        });

Просто установите класс любого ввода, который должен быть отформатирован как валюта <input type="text" class="currencyMask" />, и он отлично отформатирует его в любом браузере.

3 голосов
/ 28 декабря 2015

Попробуйте регулярное выражение валюты с помощью jQuery (без плагина) :

$(document).ready(function(){
  $('#test').click(function() {
    TESTCURRENCY = $('#value').val().toString().match(/(?=[\s\d])(?:\s\.|\d+(?:[.]\d+)*)/gmi);
    if (TESTCURRENCY.length <= 1) {
      $('#valueshow').val(
        parseFloat(TESTCURRENCY.toString().match(/^\d+(?:\.\d{0,2})?/))
      );
    } else {
      $('#valueshow').val('Invalid a value!');
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" value="12345.67890" id="value">
<input type="button" id="test" value="CLICK">
<input type="text" value="" id="valueshow">

Редактировать: Новая проверка значения на действительное / недействительное

0 голосов
/ 22 января 2015

Джус сталкивался с этим, поскольку у меня была та же проблема. Очень просто и быстро реализовать:

http://plentz.github.io/jquery-maskmoney/

...