我在匹配英国货币的正则表达式后(即£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