2011-10-10 85 views
5

我需要一個JavaScript正則表達式,它只接受正數和小數。這是我所擁有的,但有些錯誤 - 它似乎沒有取得單個正數。正則表達式只接受正數和小數

例如,9將不起作用。我如何重組這個,所以如果至少有一個正數,它會起作用嗎?

+0

由於你在每個[0-9]字符類之後有+,沒有小數的數字必須至少爲兩位數字。 –

回答

14
/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/ 

比賽

0 
+0 
1. 
1.5 
.5 

但不

. 
1..5 
1.2.3 
-1 

編輯:

爲了處理科學記數法(1e6),你可能想要做

/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/ 

如果你想嚴格正數,沒有零,你可以做

/^[+]?([1-9][0-9]*(?:[\.][0-9]*)?|0*\.0*[1-9][0-9]*)(?:[eE][+-][0-9]+)?$/ 
+0

是的這個很不錯..找不到任何問題。 –

+0

@MikeChristensen,它不處理科學記數法,但是你可以在'$'之前使用一個可選的'[eE] [+ - ] [0-9] +'來處理。 –

1

有幾種不同的方式來做到這一點取決於你的需要:

/^[0-9.]+$/比賽11.1但不-1

/^[0-9]+\.[0-9]+$/比賽1.1但不1-1

一般情況下,我建議使用一個簡單的regExp參考指南,如http://www.regular-expressions.info/用於構建表達式,然後使用java對其進行測試腳本就在您的瀏覽器控制檯:

"123.45".match(/^[0-9.]+$/)

+0

這也包括'...'等等。 – NT3RP

+0

的確如此 - 在編輯之前,問題似乎更廣泛。 –

1

如何像:

^[.]?[0-9]+[.]?[0-9]*$ 
+0

這不也符合'.0.0'這樣的東西嗎? – NT3RP

+0

是的,這是一個問題..我想用「或」條款是最好的選擇。 –

0

你可以試試這 -

^\d{0,10}(\.\d{0,2})?$ 

也是一個很酷的網站來測試以及得到你自己的正則表達式的描述 https://regex101.com/