2015-04-04 171 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