负面货币价值的正则表达式?

时间:2013-02-17 17:07:23

标签: regex currency

我想要一个可以处理与金钱相关的数字的正则表达式。目前我正在使用它:

^\$?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2}){0,1}$

我的测试集包括以下数字,我想宣布它们有效。我还提到了每个数字,使用上面提到的正则表达式进行验证时验证结果是什么:

123456789012345 //valid
123456789012345.34 //valid

123,456,789,012,345 //valid
123,456,789,012,345.34 //valid

-123,456,789,012,345 //not valid
-123,456,789,012,345.34 //not valid

它似乎适用于除负值之外的所有事物。

其次,它似乎在开始时使用$处理值。是否可以修改为在开始时接受USD$,而不仅仅是$,以便以下数字有效?:

USD$123,456,789,012,345
USD$123,456,789,012,345.34

2 个答案:

答案 0 :(得分:3)

还要匹配否定数字,并匹配USD$的<{1}} , 您可以将$更改为^\$?

答案 1 :(得分:1)

实际上这很容易:

^(?:(?:USD)?\$)?(?:-)?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$

我已将\$?替换为:

(?:(?:USD)?\$)? - 这与可选的$ - 符号匹配,可选地在其前面加USD

并补充道:

(?:-)? - 这与第一个数字

之前的可选-匹配

我最后还将{0,1}缩写为?。这是一回事。

RegExr demo

如果你想消除一些混乱,根据Bergi的评论,你可以简化一下:

^((USD)?\$)?-?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$

我不想触及其他非捕获组。