暂时退出regex
游戏。试图提出一些允许用户输入货币值的信息,无论是否带有美元符号或带有/不带逗号。例如,以下所有值都应该有效:
5
5.1
5.10
$5
500,000
500,000.1
500,000.10
$100,000,000.50
etc....
有人可以帮帮我吗?
答案 0 :(得分:18)
这应该有效:
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, ''));
...
}
答案 1 :(得分:2)
我没有使用Qunit框架测试驱动开发,TDD。
TDD概述http://net.tutsplus.com/tutorials/javascript-ajax/test-driven-javascript-development-in-practice/
1st:写测试。
第二:观看测试失败。
第3名:通过考试。
第四:重构。
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+)?$/;
但是我忘记了重构。
答案 2 :(得分:1)
^(\$?\d{1,3}(?:,?\d{3})*(?:\.\d{2})?|\.\d{2})?$
这个花了一段时间,但我终于得到了一些功能齐全的东西。它允许使用100.00,.35,$ 1.35等情况。同时排除逗号错位的条目,逗号之间或之前的数字太多,或小数点后的数字太多。
你可以玩它here
答案 3 :(得分:0)
也许这个? http://refiddle.com/2tg
(\$?(:?\d+,?.?)+)
另外,http://refiddle.com/2ti;与123,45.4.3
等数字不匹配的较长版本^(\$?(:?\d+,?)+(:?.?\d+)?)$
答案 4 :(得分:0)
var currencyRegex = /^[$£€]\d+(?:\.\d\d)*$/g;
示例:$10 or £10 0r €10
,但是如果您使用简单的10
,则将是错误的