2015-04-04 134 views
1

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

  • 345.5
  • 876.45

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

我的想法是,通过使用括号像这样:(\.[0-9]{1,2}),我可以捆绑整个“十进制加一个或两个整数”部分。但它没有发生。除了其他问题,这个正则表达式允许诸如245.345.567之类的东西滑过。 :(

帮助,请!

回答

3

你的正则表达式是好的,但你需要匹配字符串的开头和结尾。否则,你的正则表达式可以(正确)只匹配字符串的一部分,仍然。返回匹配匹配字符串的开头,使用^,为末,用$

更新:如阿维纳什已经指出的那样,你可以用?替代{0,1} JS支持\d的数字,因此,正则表达式可以进一步简化

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

原:

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

固定,并且速度更快;)

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

+2

甚至更​​简单的'/^[0-9] +(:\ 。[0-9] {1,2})?$ /。test('345.567')' – 2015-04-04 03:51:38

+0

谁想过!但为什么这很重要?在我的情况下,是不是在字符串中找到匹配的表达式,而不管它是唯一的东西还是大字符串的一部分? – dotslash 2015-04-04 03:51:48

+0

@AvinashRaj谢谢你!我想知道为什么在JS中没有PHP(Perl?)相当于'\ d'。会让生活变得更简单。 – dotslash 2015-04-04 03:53:48