2016-07-05 63 views
0
new RegExp('^\\d+[.]?([0,2,5,7]?[0,5])?$').test(236.70) 

爲什麼此代碼不適用於123.20和123.70?雖然它成功地測試了以下輸入:正則表達式不正確地匹配數字

123.00, 123.05, 123.25, 123.50, 123.55, 123.75

+1

嘗試傳遞字符串而不是數字:) –

+2

除非打算匹配逗號,否則不應將逗號放在字符類中。正則表達式應該也是首選。 '/^\ d + \?([0257]?[05]?)$ /' – 4castle

+0

謝謝@ 4castle,這有幫助 –

回答

3

您傳遞值236.70和最有可能的JavaScript剝離最後0以來236.70 == 236.7。然後,它不匹配正則表達式的最後部分,在那裏匹配[0,5]的結尾。

而是將其強制轉換爲字符串以強制尾隨0保持在那裏。

+1

謝謝@fedorqui –

3

你的正則表達式有一些語法錯誤。在你匹配小數的部分,當它(可能)應該在裏面時,你有?括號之外,並且你的角色類中有,s,即使你沒有試圖匹配它們。

字符類別([])要求您列出要匹配的個別個字符。您還可以使用-(例如,[0-9])獲得範圍的字符。

new RegExp('^\\d+[.]?([0257]?[05]?)$').test(236.70) 
+0

謝謝@Rocket Hazmat –

+0

new RegExp('^([5-9 (00.50) VM37068:1 Uncaught SyntaxError:missing)在參數列表後 ([。])?([0257]?[05])?$' 爲什麼我得到這個錯誤? –

+0

@vikkyDevil:'00.50'不是一個有效的數字。試試'0.50','0.5'或甚至僅僅'.5'。 –