2013-02-17 81 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\$)?-?