2009-06-15 101 views
3

我在匹配英國貨幣的正則表達式後(即£13.00,£9,999.99和£12,333,333.02),但不允許負值( - £2.17)或零值(£0.00或0)。英國貨幣javascript的正則表達式

我試圖自己創造一個,但我有一個正確的混亂!

任何幫助很好地收到。

謝謝!

回答

5

這會做到這一點(當然主要是...)

/^£?[1-9]{1,3}(,\d{3})*(\.\d{2})?$/ 

利用了^和$以確保沒有否定或其它字符是在字符串中,並假定逗號將被使用。英鎊符號和便士是可選的。

編輯:實現你說的非零所以替換[1-9]

更新第一\ d:它已經指出,上述將不匹配£0.01。下面的改進,但現在有一個複雜的水平,它可能更好地測試/ [1-9] /第一,然後上述 - 沒有基準測試。

/^£?(([1-9]{1,3}(,\d{3})*(\.\d{2})?)|(0\.[1-9]\d)|(0\.0[1-9]))$/ 

簡要說明:串的

  • 匹配開始,隨後可選的 「£」
  • 接着匹配
    • 一個具有用於逗號潛在1>£量分離分組和可選便士
    • 或a <£1> =£0.10 amou NT
    • 或< =£0.09量
  • 接着匹配線的端

便士(零在上面)的多級分你需要增加了效率較低變得正則表達式。

+2

大約0.50?那不會匹配... – 2009-06-15 09:58:20

+0

@Tim - 看上去很好。糾正。 – annakata 2009-06-15 10:22:02

+0

輝煌。謝謝 - 這將花費我很多時間。 – Sniffer 2009-06-15 10:42:14

0

你可以只讓兩個通道:

/^£\d{1,3}(,\d{3})*(\.\d{2})?$/ 

驗證格式,

/[1-9]/ 

,以確保至少有一個數字是非零。

這比一次傳遞效率低(謝謝,annakata,基準信息),但對於第一個實現,只是「說出你想要的」可以顯着減少開發時間。

3

在Unix/Linux的,它並不總是能夠在一個JavaScript文件中的 '£'​​ 標誌的類型,所以我傾向於使用十六進制數,即:?

/^ \ XA3 \ d { 1,3}([,] \ d {3} | \ d)?*([。] \ d {1,2})?$/

這似乎照顧我遇到的英國貨幣金額表示的所有組合。