我正在使用与英国货币匹配的正则表达式(即£13.00,£9,999.99和£12,333,333.02),但不允许负值( - £2.17)或零值(£0.00或0)。
我自己试图创造一个,但我有一个正确的混乱!
任何得到很好的帮助。
谢谢!
答案 0 :(得分: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 :(得分:4)
在Unix / Linux下,并不总是可以在JavaScript文件中输入“£”符号,因此我倾向于使用其十六进制表示,因此:
<强> / ^ \ XA3 \ d {1,3}([,] \ d {3} | \ d)????*([。] \ d {1,2})$ / < /强>
这似乎照顾了我遇到的所有英国货币金额表示组合。
答案 2 :(得分:1)
/ ^ \ xA3?\ d {1,}(?:\,?\ d +)*(?:。\ d {1,2})?$ /; 说明:
答案 3 :(得分:0)
你可以做两次传球:
/^£\d{1,3}(,\d{3})*(\.\d{2})?$/
验证格式,
/[1-9]/
确保至少有一位数字为非零。
当然,这比在一次通过中效率低(感谢,annakata,基准信息),但对于第一个实现,只是“说出你想要的东西”可以显着缩短开发时间。