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+)?$/;
5条答案
按热度按时间e4eetjau1#
也许这个?https://regex101.com/r/xBct9E/1
https://regex101.com/r/xBct9E/3一个更长的版本,不匹配123,45.4.3等数字
6psbrbz92#
这应该可以工作:
对逗号的放置稍微严格一点(例如,将拒绝3,2.10):
从中得到一个数字:
k75qkfdt3#
我没有测试驱动开发,TDD,这一个使用Qunit框架。
TDD概述http://net.tutsplus.com/tutorials/javascript-ajax/test-driven-javascript-development-in-practice/
第一步:编写测试。
第二:观察测试失败。
第3步:通过测试。
第四步:重构。
这里有一个可能的解决方案来解决你的问题。
示例:http://jsfiddle.net/vpyV6/
但是我忘了重构。
thtygnil4#
^(\$?\d{1,3}(?:,?\d{3})*(?:\.\d{2})?|\.\d{2})?$
这个花了一段时间,但我终于得到了功能齐全的东西。它允许100.00、0.35、1.35美元等情况。同时排除逗号放错位置、逗号之间或逗号前数字太多或小数点后数字太多的条目。
你可以玩它here
dvtswwa35#
示例:
$10 or £10 0r €10
,但如果使用简单的10
,则会出错