JavaScript正则表达式匹配量

时间:2015-04-04 03:47:21

标签: javascript regex

我试图写一个正则表达式来匹配金额。在我的情况下,我需要的是,金额应该是一个正整数或如果使用小数,它必须后跟一个或两个整数。基本上,以下是有效金额:

  • 34000
  • 345.5
  • 876.45

我写的是:/[0-9]+(\.[0-9]{1,2}){0,1}/

我的想法是通过使用这样的括号:(\.[0-9]{1,2}),我将能够捆绑整个"十进制加上一个或两个整数"部分。但它并没有发生。在其他问题中,这个正则表达式允许245.345.567这样的东西漏掉。 :(

请帮助!

1 个答案:

答案 0 :(得分:3)

您的正则表达式很好,但您需要匹配字符串的开头和结尾。否则,你的正则表达式只能匹配字符串的一部分,仍然(正确)返回匹配。要匹配字符串的开头,请使用^,最后使用$

更新:正如Avinash所说,您可以将{0,1}替换为?。 JS支持数字\d,因此可以进一步简化正则表达式

最后,因为如果仅针对正则表达式进行测试,则可以使用非捕获组((?:...)而不是(...)),它提供better performance

原:

/[0-9]+(\.[0-9]{1,2}){0,1}/.test('345.567')

固定,更快;)

 /^\d+(?:\.\d{1,2})?$/.test('345.567')