我在匹配英國貨幣的正則表達式後(即£13.00,£9,999.99和£12,333,333.02),但不允許負值( - £2.17)或零值(£0.00或0)。英國貨幣javascript的正則表達式
我試圖自己創造一個,但我有一個正確的混亂!
任何幫助很好地收到。
謝謝!
我在匹配英國貨幣的正則表達式後(即£13.00,£9,999.99和£12,333,333.02),但不允許負值( - £2.17)或零值(£0.00或0)。英國貨幣javascript的正則表達式
我試圖自己創造一個,但我有一個正確的混亂!
任何幫助很好地收到。
謝謝!
這會做到這一點(當然主要是...)
/^£?[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]))$/
簡要說明:串的
便士(零在上面)的多級分你需要增加了效率較低變得正則表達式。
你可以只讓兩個通道:
/^£\d{1,3}(,\d{3})*(\.\d{2})?$/
驗證格式,
/[1-9]/
,以確保至少有一個數字是非零。
這比一次傳遞效率低(謝謝,annakata,基準信息),但對於第一個實現,只是「說出你想要的」可以顯着減少開發時間。
在Unix/Linux的,它並不總是能夠在一個JavaScript文件中的 '£' 標誌的類型,所以我傾向於使用十六進制數,即:?
/^ \ XA3 \ d { 1,3}([,] \ d {3} | \ d)?*([。] \ d {1,2})?$/
這似乎照顧我遇到的英國貨幣金額表示的所有組合。
大約0.50?那不會匹配... – 2009-06-15 09:58:20
@Tim - 看上去很好。糾正。 – annakata 2009-06-15 10:22:02
輝煌。謝謝 - 這將花費我很多時間。 – Sniffer 2009-06-15 10:42:14