2013-02-17 80 views
1

我想要一个正则表达式,可以在与钱相关的数字上工作。目前我使用此:负值货币值的正则表达式?

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

我的测试中包括以下数字,我想要得到声明有效。

123456789//valid 
123456789.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

是的,它可以。你有什么尝试?为此目的的[正则表达式](http://www.regular-expressions.info/tutorial.html)是微不足道的。 – Bergi 2013-02-17 17:09:20

回答

1

这真的比较容易,实际上是:

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

我已经更换了\$?有:

(?:(?:USD)?\$)? - 此相匹配的可选$ -sign,任选USD在它前面

并补充说:

(?:-)? - 此相匹配的可选-前第一位数字

我也简写了{0,1},最后是?。这是一回事。

RegExr demo

如果你想与一些杂乱的做掉,按照BERGI的评论,你可以把它简化一下:

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

我不想碰其他非收集团体。

+0

这将允许没有'$'的'USD'。 – MikeM 2013-02-17 17:23:47

+0

'(?:-)'有点夸张,不是吗? – Bergi 2013-02-17 17:25:57

+0

@Bergi那么,它似乎已符合OP的整个模式。不想打破潮流。 – 2013-02-17 17:28:08

3

为了匹配负数,而为了配合USD$$代替
你可以改变^\$?^(?:USD\$)?-?