2014-05-02 27 views
0

這裏正則表達式匹配的數字是pattern上我的工作:浮點在JavaScript

/^\d+((.\d+))?(,\d+((.\d+))?)*$/

它支持

1.2,30.5,13.54

25.65

但我想pattern其中支持以下內容:

1.3,.3,4.5

.3,.4,.6

.2

1.3,5.6,.5

回答

1

根據您給出的例子,你需要一個小數部分,所以你可以使用

/(\d*\.\d+),?/ 

這WIL l匹配每個給定的例子。 如果你也想不帶小數點點匹配的數字,只需添加一個第二場比賽:

/(\d*\.\d+|\d+),?/ 

哦,對JavaScript,添加「G」修飾符(全局搜索),你需要添加它作爲第二個參數的正則表達式的構造函數:

re = new RegExp("(\d*\.\d+|\d+),?", "g"); 

例子:http://regex101.com/r/vL5aT0

好吧,我不知道是什麼目的,你都符合您的字符串。如果你只是想驗證他們,他們應該恰好看起來像你的例子,使用此:

/((\d*\.\d+|\d+),?)*(\d*\.\d+|\d+)$/ 

感謝Elergy指着我這一點。 順便說一句,Elergy的正則表達式也只匹配句號和逗號的無用線,像

.3,.4,.5,,,,8,.,7.,.,.,.,4.,.,.,.,.9,.,,,4.,,1,, 
+0

請注意,您也可以通過執行'/ regex/g'來添加'g'標誌。 –

+0

不知道。總是認爲,我需要JavaScript中的RegEx的這個炸燬的構造函數。謝謝:) – WolleTD

0

如果我對你的問題的理解是正確的,這種表達可以幫助你:

/^\d*[\.,]\d*(?:,\d*[\.,]\d*)*$/ 
+0

如果我們輸入單個數字表達式將失敗。像'3'一樣的 。 對於所有其他輸入它的作品完美。 –

0
/(\d+)?\.\d+(,?)/ 

(\d+)?匹配所有數字,但可選。
\d+(,?)將所有數字與,匹配爲可選項。

0

之後你想怎麼做?如果你的目標是找出有效的浮點數的一個逗號分隔的列表,你可以使用Number構造函數,它返回NaN如果數字是無效的(計算結果爲false):

"1.3,5.6,a.s".split(",").every(Number) 
false 
"1.3,5.6,.5".split(",").every(Number) 
true 

個人而言,我喜歡以避免正則表達式在可能的情況下,我認爲這是相當自我記錄。split,上的字符串,並檢查every值是否爲有效數字。