簡體   English   中英

JavaScript 中貨幣值的正則表達式

[英]regex for money values in JavaScript

離開regex游戲已有一段時間了。 嘗試提出一些允許用戶輸入帶/不帶美元符號或帶/不帶逗號的貨幣值的東西。 例如,以下所有值都應該有效:

5
5.1
5.10
$5
500,000
500,000.1
500,000.10
$100,000,000.50
etc....

有人可以幫幫我嗎?

這應該有效:

isValid = str.search(/^\$?[\d,]+(\.\d*)?$/) >= 0;

對逗號放置更嚴格一點(例如,會拒絕 3,2.10):

isValid = str.search(/^\$?\d+(,\d{3})*(\.\d*)?$/) >= 0;

要從中得到一個數字:

if(isValid) {
  var num = Number(str.replace(/[\$,]/g, ''));
  ...
}

對於使用 Qunit 框架的這個,我沒有測試驅動開發,TDD。

TDD 概述http://net.tutsplus.com/tutorials/javascript-ajax/test-driven-javascript-development-in-practice/

第一:編寫測試。

第二:手表測試失敗。

第三:使測試通過。

第四:重構。

var moneyTest_RE = /^\$?\d+((,\d{3})+)?(\.\d+)?$/;
test("test money format for valid values", function () {
    var moneyArr = ["5","5.1","5.10","$5","500,000","500,000.1","500,000.10","$100,000,000.50", "500,000,100" ];
    var i = moneyArr.length;

    while( i-- ){
        equal( moneyTest_RE.test( moneyArr[ i ] ), true, moneyArr[ i ] + " didn't match completely." );
    }
});
test("test money format for invalid values", function () {
    var moneyArr = ["5..","$$5.1",".5.10","$5.2.","50,0,000",",500,000.1","500,000,10,","$1,00,000,000.50", "500,000,10"];
    var i = moneyArr.length;

    while( i-- ){
        equal( moneyTest_RE.test( moneyArr[ i ] ), false, moneyArr[ i ] + " didn't match completely." );
    }
});

這是您的問題的一種可能解決方案。

var moneyTest_RE = /^\$?\d+((,\d{3})+)?(\.\d+)?$/;  

演示在這里:http: //jsfiddle.net/vpyV6/

不過我忘了重構。

^(\$?\d{1,3}(?:,?\d{3})*(?:\.\d{2})?|\.\d{2})?$

這花了一段時間,但我終於得到了一些功能齊全的東西。 它允許 100.00、.35、1.35 美元等情況。同時排除逗號位置錯誤、逗號之間或之前的數字過多或小數點后數字過多的條目。

你可以在這里

也許這個? http://refiddle.com/2tg

(\$?(:?\d+,?.?)+)

另外, http://refiddle.com/2ti 與 123,45.4.3 等數字不匹配的較長版本

^(\$?(:?\d+,?)+(?:.?\d+)?)$
var currencyRegex = /^[$£€]\d+(?:\.\d\d)*$/g;

示例: $10 or £10 0r €10但如果您使用簡單的10 ,這將是錯誤的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM