regex JavaScript中的货币值的正则表达式

k4ymrczo  于 2023-05-08  发布在  Java
关注(0)|答案(5)|浏览(135)

已经离开regex游戏一段时间了。试图想出一些东西,将允许用户输入一个钱的价值,无论是有/没有美元符号或有/没有逗号。例如,以下所有值都应有效:

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

有人能帮帮我吗?

e4eetjau

e4eetjau1#

也许这个?https://regex101.com/r/xBct9E/1

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

https://regex101.com/r/xBct9E/3一个更长的版本,不匹配123,45.4.3等数字

^(\$?(:?\d+,?)+(?:.?\d+)?)$
6psbrbz9

6psbrbz92#

这应该可以工作:

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, ''));
  ...
}
k75qkfdt

k75qkfdt3#

我没有测试驱动开发,TDD,这一个使用Qunit框架。
TDD概述http://net.tutsplus.com/tutorials/javascript-ajax/test-driven-javascript-development-in-practice/
第一步:编写测试。
第二:观察测试失败。
第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+)?$/;

示例:http://jsfiddle.net/vpyV6/
但是我忘了重构。

thtygnil

thtygnil4#

^(\$?\d{1,3}(?:,?\d{3})*(?:\.\d{2})?|\.\d{2})?$
这个花了一段时间,但我终于得到了功能齐全的东西。它允许100.00、0.35、1.35美元等情况。同时排除逗号放错位置、逗号之间或逗号前数字太多或小数点后数字太多的条目。
你可以玩它here

dvtswwa3

dvtswwa35#

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

示例:$10 or £10 0r €10,但如果使用简单的10,则会出错

相关问题