javascript的英国货币正则表达式

时间:2009-06-15 09:40:03

标签: javascript regex

我正在使用与英国货币匹配的正则表达式(即£13.00,£9,999.99和£12,333,333.02),但不允许负值( - £2.17)或零值(£0.00或0)。

我自己试图创造一个,但我有一个正确的混乱!

任何得到很好的帮助。

谢谢!

4 个答案:

答案 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]))$/

简要说明:

  • 匹配字符串的开头,后跟可选的“£”
  • 然后匹配
    • a>£1金额,可能以逗号分隔的分组和可选的便士
    • OR a<£1> =£0.10金额
    • 或者< =£0.09金额
  • 然后匹配行尾

你需要添加到正则表达式中的便士(上面为零)的分数越多,效率就越低。

答案 1 :(得分:4)

在Unix / Linux下,并不总是可以在JavaScript文件中输入“£”符号,因此我倾向于使用其十六进制表示,因此:

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

这似乎照顾了我遇到的所有英国货币金额表示组合。

答案 2 :(得分:1)

/ ^ \ xA3?\ d {1,}(?:\,?\ d +)*(?:。\ d {1,2})?$ /; 说明:

  • ^匹配字符串的开头或行的开头。
  • xA3匹配一个“£”字符(字符代码163)
  • ?前面标记的0到1之间匹配的量词。
  • \ d匹配任何数字字符(0-9)。
  • {1,}匹配1个或多个前面的令牌。
  • (?:将多个令牌分组在一起,而不创建捕获组。
  • \,匹配一个“,”字符(字符代码44)。
  • {1,2}在前面的令牌的1和2之间进行匹配。
  • $匹配字符串的末尾,如果多行标志(

答案 3 :(得分:0)

你可以做两次传球:

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

验证格式,

/[1-9]/

确保至少有一位数字为非零。

当然,这比在一次通过中效率低(感谢,annakata,基准信息),但对于第一个实现,只是“说出你想要的东西”可以显着缩短开发时间。