我想要一个可以处理与金钱相关的数字的正则表达式。目前我正在使用它:
^\$?(?:\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
答案 0 :(得分:3)
还要匹配否定数字,并匹配USD$
的<{1}} ,
您可以将$
更改为^\$?
答案 1 :(得分:1)
实际上这很容易:
^(?:(?:USD)?\$)?(?:-)?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$
我已将\$?
替换为:
(?:(?:USD)?\$)?
- 这与可选的$
- 符号匹配,可选地在其前面加USD
并补充道:
(?:-)?
- 这与第一个数字
-
匹配
我最后还将{0,1}
缩写为?
。这是一回事。
如果你想消除一些混乱,根据Bergi的评论,你可以简化一下:
^((USD)?\$)?-?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$
我不想触及其他非捕获组。