用于javascript的UK货币正则表达式

用于javascript的UK货币正则表达式,javascript,regex,Javascript,Regex,我想要的正则表达式匹配英国货币(即13.00英镑、9999.99英镑和12333333.02英镑),但不允许负值(-2.17英镑)或零值(0.00英镑或0英镑) 我曾试图自己创造一个,但我已经陷入了一个正确的混乱 得到了很大的帮助 谢谢 这样就可以了(好吧,主要是…) 利用^和$确保字符串中没有负数或其他字符,并假定将使用逗号。英镑符号和便士是可选的 编辑:意识到您说过非零,所以将第一个\d替换为[1-9] 更新:有人指出上述金额与0.01英镑不符。下面的改进是可以实现的,但是现在有一个复杂的级

我想要的正则表达式匹配英国货币(即13.00英镑、9999.99英镑和12333333.02英镑),但不允许负值(-2.17英镑)或零值(0.00英镑或0英镑)

我曾试图自己创造一个,但我已经陷入了一个正确的混乱

得到了很大的帮助

谢谢

这样就可以了(好吧,主要是…)

利用^和$确保字符串中没有负数或其他字符,并假定将使用逗号。英镑符号和便士是可选的

编辑:意识到您说过非零,所以将第一个\d替换为[1-9]

更新:有人指出上述金额与0.01英镑不符。下面的改进是可以实现的,但是现在有一个复杂的级别,首先测试/[1-9]/可能更好,然后是上面的-还没有对其进行基准测试

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

  • 匹配字符串的开头,后跟可选的“£”
  • 然后匹配以下任一项:
    • 金额>1英镑,可能采用逗号分隔分组和可选便士
    • 或a=0.10英镑的金额

    • 或者你可以只传球两次:

      /^£\d{1,3}(,\d{3})*(\.\d{2})?$/
      
      验证格式,以及

      /[1-9]/
      
      确保至少有一位数字为非零


      当然,这比一次完成效率要低(感谢annakata提供的基准信息),但是对于第一次实现,只要“说出你想要的”就可以显著减少开发时间。

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

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

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

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

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

      @Tim-发现得很好。更正得很好。谢谢-我花了很长时间才想到这一点。不幸的是,仍然没有匹配到20.00英镑这样的简单数字。我对它进行了基准测试-在进行预检查之前,你必须有10万次失败的匹配。这不值得逻辑/可读性问题。完美。非常感谢uch!对于任何使用jquery验证器的人,顺便说一句:
      jquery.validator.addMethod('currency',function(value,element){var result=value.match(/^\xA3?\d{1,3})([,]\d{3}\d)*?([.]\d{1,2})$/);console.log(“val currency”+result);返回结果;},,,'请指定一个英镑金额。
      /[1-9]/