我已经有一段时间没有接触正则表达式了。现在尝试想出一个可以让用户输入带/不带美元符号或带/不带逗号的货币价值的正则表达式。例如,以下所有值都应该是有效的:
5
5.1
5.10
$5
500,000
500,000.1
500,000.10
$100,000,000.50
etc....
请问有人可以帮我吗?
我已经有一段时间没有接触正则表达式了。现在尝试想出一个可以让用户输入带/不带美元符号或带/不带逗号的货币价值的正则表达式。例如,以下所有值都应该是有效的:
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, ''));
...
}
string.search(regex)>-1
,而是直接使用 regex.test(string)
。 - Bergi(\.\d*)?
更改为 (\.\d{2})?
,因为分钱几乎总是到百分之一,不再多了。此外,第一个 \d+
可以是 \d{1,3}
,这样它就不会只匹配逗号前的所有数字。 - Riot Goes Woof这次我没有使用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})?$
var currencyRegex = /^[$£€]\d+(?:\.\d\d)*$/g;
例子:$10 或 £10 或 €10
,但如果你使用简单的10
,那就是错误的。
也许这个可以吗? https://regex101.com/r/xBct9E/1
(\$?(:?\d+,?.?)+)
^(\$?(:?\d+,?)+(?:.?\d+)?)$
:
字符,或者因为它允许使用.
紧接着,
? - Bergi