[英]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.