ฉันจะจัดรูปแบบสกุลเงินให้ถูกต้องโดยใช้ jquery ได้อย่างไร

ฉันไม่ต้องการมาสก์ แต่ฉันต้องการบางอย่างที่จะจัดรูปแบบสกุลเงิน (ในเบราว์เซอร์ทั้งหมด) และไม่อนุญาตให้พิมพ์ตัวอักษรหรืออักขระพิเศษใด ๆ ขอบคุณสำหรับความช่วยเหลือ

ตัวอย่าง:

ใช้ได้: $50.00
$1,000.53

ไม่ถูกต้อง: $w45.00
$34.3r6


person ninjasense    schedule 18.02.2011    source แหล่งที่มา
comment
คุณช่วยอธิบายได้ไหมว่าทำไมรายการอื่นๆ จึงไม่ตรงตามมาตรฐานของคุณ   -  person Jeff    schedule 18.02.2011
comment
StackOverflow เป็นเครื่องมือค้นหาของฉันสำหรับคำถามเช่นนี้ ความคิดเห็นของชุมชนที่นี่ช่วยให้เห็นภาพที่รวดเร็วและแม่นยำยิ่งขึ้นว่าเครื่องมือและแนวปฏิบัติใดมีคุณค่า ฉันบอกว่าให้ถามคำถามประเภทนี้ต่อไป   -  person Feckmore    schedule 28.01.2013
comment
ได้จาก Google มาที่นี่   -  person the-nick-wilson    schedule 24.12.2015
comment
คำถามนี้เป็นผลการค้นหาอันดับต้นๆ ของ Google สำหรับสกุลเงินรูปแบบ jquery   -  person Paul L    schedule 28.07.2016
comment
สิ่งนี้ตอบคำถามของคุณหรือไม่? จะจัดรูปแบบตัวเลขเป็นสตริงสกุลเงินได้อย่างไร   -  person Heretic Monkey    schedule 07.04.2020


คำตอบ (7)


ปลั๊กอินรูปแบบ JQUERY
http://code.google.com/p/jquery-formatcurrency/

person Robert Harvey    schedule 18.02.2011
comment
น่าเสียดายที่เข้ากันไม่ได้กับ jQuery เวอร์ชันล่าสุด - person Patrick; 11.01.2014
comment
อันนี้ใช้งานได้ดีกับ jquery 2.0 plentz.github.io/jquery-maskmoney - person hal9000; 31.12.2014

ตัวเลือกอื่น (หากคุณใช้มุมมองมีดโกน 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());
person Melu    schedule 06.06.2013
comment
ฉันไม่ได้โหวตสิ่งนี้ แต่ไม่พบ @String.Format ในการอ้างอิง HTML หรือ jQuery ใด ๆ ฉันเดาว่ามันเกี่ยวข้องกับ HTML ฝั่งเซิร์ฟเวอร์ที่สร้างโดย ASP.NET คำถามเดิมอ้างอิงถึงสิ่งนั้นหรือไม่ - person Nate; 03.12.2013
comment
สำหรับใครก็ตามที่สงสัยในอนาคต @String.Format เป็นเอ็นจิ้นมีดโกนสำหรับ ASP.NET || เอ็มวีซี - person Kyle; 14.01.2014
comment
ฉันชอบนิพจน์ทั่วไป ทำไมต้อง .toString() ต่อท้าย? .replace ส่งคืนสตริง - person xr280xr; 16.09.2014
comment
ฉันไม่ได้ลงคะแนนสิ่งนี้เช่นกัน แต่มันก็สมควรที่จะมอบโซลูชัน MVC Razor สำหรับคำถามที่ไม่ได้กล่าวถึง Razor, MVC หรือแม้แต่ ASP.NET และคำตอบไม่ได้ระบุด้วยซ้ำว่านี่เป็นวิธีแก้ปัญหาสำหรับ MVC มีดโกน. - person Jonathan Wood; 26.09.2014
comment
นี่เป็นคำตอบที่ดี แต่ฉันต้องเปลี่ยน regex เพื่อให้ได้ตัวเลขที่ไม่มีทศนิยมและไม่มีสัญลักษณ์ดอลลาร์ได้อย่างไร เช่น ฉันต้องการให้ 16000000 แสดงเป็น 16,000,000 - person ministe2003; 28.01.2015
comment
ไม่เป็นไร ฉันได้ตอบคำถามของตัวเองแล้ว: $(.totalSum).text('$' + parseFloat(value, 10).toFixed(0).replace(/(\d)(?=(?:[0 -9]{3})+\b)/gm, $1,).toString()); - person ministe2003; 28.01.2015
comment
แล้วถ้าฉันต้องการแทนที่ตัวคั่นทศนิยมสำหรับ ',' และตัวคั่นอื่นๆ สำหรับ '.' ล่ะ - person Deise Vicentin; 24.08.2015
comment
หลังจากค้นหาทุกที่ด้วยคำแนะนำเกี่ยวกับปลั๊กอินและอื่น ๆ อันนี้ทำงานได้อย่างสมบูรณ์แบบ! - person NoBullMan; 11.02.2019

การขยายคำตอบของ 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();
}
person Chad Kuehn    schedule 19.05.2014

เพื่อพิสูจน์ว่าเหตุใดปลั๊กอิน 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();
person Neptune Systems    schedule 12.03.2012

ใช้ 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'
  }
);

ไฮไลท์:

  • ง่ายต่อการใช้
  • มีชิ้นส่วนเสริมอยู่ในหน้ากาก
  • ความเป็นไปได้ที่จะกำหนดนามแฝงที่ซ่อนความซับซ้อน
  • มาสก์วันที่ / วันที่และเวลา
  • มาสก์ตัวเลข
  • มีการโทรกลับจำนวนมาก
  • หน้ากากที่ไม่โลภ
  • คุณสมบัติหลายอย่างสามารถเปิด / ปิด / กำหนดค่าได้ด้วยตัวเลือก
  • รองรับแอตทริบิวต์อ่านอย่างเดียว/ปิดการใช้งาน/dir="rtl"
  • รองรับแอตทริบิวต์ data-inputmask
  • รองรับหลายหน้ากาก
  • การสนับสนุน regex-mask
  • การสนับสนุนมาสก์แบบไดนามิก
  • การสนับสนุนมาสก์ก่อนการประมวลผล
  • การจัดรูปแบบค่า / การตรวจสอบความถูกต้องโดยไม่มีองค์ประกอบอินพุต
person Fernando Kosh    schedule 18.07.2014
comment
หลังจากดาวน์โหลด ZIP (จากเว็บ) ฉันพบว่าไฟล์ *.js ภายใน ZIP มีรูปแบบการตั้งชื่อไฟล์ที่แตกต่างกัน ฉันสับสนนิดหน่อย.... - person gumuruh; 02.07.2017
comment
@gumuruh ดู dist/ โฟลเดอร์ของไฟล์ ZIP ZIP ที่อยู่ในรูทของโฟลเดอร์ที่แตกออกมานั้นเป็นไฟล์แพ็คเกจและไม่สามารถใช้งานได้ ให้ความสนใจกับส่วนขยาย โหลดเฉพาะสิ่งที่จำเป็นเท่านั้น - person Fernando Kosh; 11.02.2018
comment
@FernandoKosh @drew010 เป็นไปได้ไหมที่จะใช้สิ่งนี้กับหลายองค์ประกอบบนหน้า? ตัวอย่างเช่น: $('.price-format').inputmaks() หรือ $('.price-format').each(function() { $(this).inputmask() }) - person remkovdm; 04.08.2020
comment
@remkovdm ฉันใช้งานมันมานานแล้ว แต่ใช่ฉันเชื่อว่ามันใช้ได้ เอกสารและตัวอย่างแสดง $(selector) ซึ่งหมายความว่าสามารถเป็นตัวเลือก CSS ได้เหมือนกับ jQuery อื่น ๆ ดังนั้น $('.price-format').inputmask('decimal', { ... }); ควร ได้ผล - person drew010; 13.08.2020

ฉันเคยใช้ปลั๊กอินสกุลเงินรูปแบบ 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" /> แล้วระบบจะจัดรูปแบบให้สมบูรณ์แบบในเบราว์เซอร์ใดก็ได้

person Greg Snider    schedule 01.06.2016

ลองใช้สกุลเงิน regexp ด้วย 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">

แก้ไข: ตรวจสอบค่าใหม่ให้ถูกต้อง/ไม่ถูกต้อง

person KingRider    schedule 28.12.2015
comment
มีปัญหาอะไรในการลงคะแนนเสียง? คำถามนี้ (โปรดอ่าน meta.stackoverflow.com/questions/251758/ ขอบคุณ) - person KingRider; 28.03.2017