Як я можу правильно відформатувати валюту за допомогою jquery?


77

Мені не потрібна маска, але мені потрібно щось, що відформатує валюту (у всіх браузерах) і не дозволить вводити будь-які літери або спеціальні символи. Дякую за допомогу

Приклад:

Дійсно: $ 50,00
$ 1,000,53

Недійсний: $ 45,00
$ 34,3r6


Чи можете ви пояснити, чому інші не відповідали вашим стандартам?
Джефф

37
StackOverflow - це моя пошукова система для таких питань. Відгуки громади тут дозволяють набагато швидше і точніше уявити, які інструменти та практики цінуються. Я кажу: продовжуйте надходити такі запитання.
Фекмор

13
Потрапив сюди від Google.
the-nick-wilson

3
Це питання є найкращим результатом пошуку Google для "валюти формату jquery"
Paul L

Відповіді:



99

Іншим варіантом (якщо ви використовуєте подання бритви ASP.Net) є: на вашому поданні ви можете це зробити

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

Це відформатує його правильно. примітка (item.total - подвійний / десятковий)

якщо в jQuery ви також можете використовувати регулярний вираз

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

4
Я не проголосував за це, але я не можу знайти @String.Formatв жодному посиланні HTML або jQuery. Я гадаю, це пов’язано із HTML-кодом на стороні сервера, згенерованим ASP.NET. Чи посилалося оригінальне запитання на це?
Nate

5
Для тих, хто цікавиться в майбутньому, @ String.Format - це бритвенний движок для ASP.NET || MVC
Kyle

2
Мені подобається регулярний вираз. Чому .toString () наприкінці? .replace повертає рядок.
xr280xr

3
Я теж не підтримав це, але це заслуговує на те, що він надав рішення MVC Razor на питання, в якому не згадувалося Razor, MVC або навіть ASP.NET, і у відповіді навіть не було сказано, що ось рішення для MVC Бритва.
Джонатан Вуд

1
Це чудова відповідь, але як мені потрібно змінити регулярний вираз, щоб отримати число без десяткових знаків і без символу долара? наприклад, я хотів би, щоб 16000000 відображалося як 16 000 000
ministe2003

38

Розширивши відповідь Мелу, ви можете зробити це, щоб функціоналізувати код і обробити негативні суми.

Вихідні дані:
$ 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();
}

20

Як наслідок того, чому плагін 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

Використовуйте 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"
  • підтримка атрибутів маски введення даних
  • підтримка декількох масок
  • підтримка регулярної маски
  • підтримка динамічної маски
  • Підтримка попередньої обробки маски
  • форматування / перевірка значення без елемента введення

після завантаження ZIP (з Інтернету) я виявив, що файл * .js всередині ZIP має іншу конвенцію про іменування файлів. Я трохи розгубився ....
gumuruh 02

@gumuruh Загляньте в dist / папку ZIP-файлу. ZIP-файли в кореневій папці, що витягується, є пакунком і не використовуються. Увага до розширень. Завантажуйте лише те, що вам потрібно.
Фернандо Кош

@FernandoKosh @ drew010 Чи можна використовувати це для кількох елементів на сторінці? Наприклад, наприклад: $('.price-format').inputmaks() або $('.price-format').each(function() { $(this).inputmask() })
remkovdm

1
@remkovdm Минув деякий час, відколи я це впровадив, але так, я вважаю, що це було добре. Документи та приклади показують $ (селектор), що означає, що це може бути селектор CSS, як і будь-який інший jQuery. Так $('.price-format').inputmask('decimal', { ... }); має працювати.
draw010

9

Раніше я використовував плагін валюти у форматі 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" />і він ідеально відформатує його в будь-якому браузері.


4

Спробуйте валюту регулярного виразу за допомогою 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">

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


Яку проблему проголосувати проти? Це запитання (будь ласка, прочитайте meta.stackoverflow.com/questions/251758/… це подяка)
KingRider
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.