2011-08-30 65 views
1

我不是一個計算機科學的人,我想弄清楚如何防止用戶輸入多個小數點。例如,我如何阻止某人進入3..5?防止多個小數點

+0

搜索'..'並適當地懲罰他們。 – tchrist

+0

@tchrist:不會抓住像「3.14.159」這樣的東西。 –

回答

1

問題中給出的背景實際上並不存在,但正確的方法是嘗試使用您正在使用的任何語言來解析輸入,如果失敗,則拒絕它。但是,如果你想有一個正則表達式:

^\d+\.\d+$ # allows numbers with a single decimal point; 
       fails if it doesn't have one 
^\d+(\.\d+)?$ # allows numbers with a decimal point or without one 

注意這些正則表達式允許在小數點兩側的數字的數量不受限制。如果你想指定的位數,就可以使用{m...n}代替+量詞:

^\d{1,3}\.\d{1,3}$ # allows numbers from 0.0 to 999.999 

編輯:如果你想允許的形式.25的輸入像tchrist建議,你可以使用方法:

^\d*\.\d+?$ 
+0

爲什麼不簡單檢查它是否有2個小數點,如果是,拒絕? '。* \ .. * \ .. *' –

+1

@Joseph因爲那麼'$$$$。!!!'將是有效的 – NullUserException

+0

我以爲他只是想防止2個小數點。看起來OP不知何故知道他只有數字和句號。好吧,我猜,安全而不是抱歉。 –

0

對於浮點數,即###。##,你可以匹配

^[0-9]+[.]{1}[0-9]{1,2}$ 

這將允許任意數量的數字,後跟一個小數(必需),後面跟一個或兩個數字。

+1

'[。]''後面'{1}'的含義是什麼? – NullUserException

+0

不,這不允許任何數字的數字。 '/ ^(?:\。\ d {1,2} | \ d +(?:\。\ d {0,2})?)$/x'確實。 – tchrist

+0

@tchrist爲什麼你把'?:'放在你的捕獲組中? (我知道它是什麼) – NullUserException

0

試試這個:

m{ 
    ^(?: \. \d{1,2} # eg: ".25" 
     | \d+   # eg: "2343409823409823049823094823094820389402984230948" 
       (?: 
        \. \d{0,2} 
      )?  # eg: "186282.42" 
    ) 
    $ 
}x