2010-01-05 158 views
1

我想驗證一個數字。該數字必須從-99.99到+99.99,但0(零)除外。 我想出了這個正則表達式表達RegEx number [-99.99 ..- 0.01] + [0.01..99.99]

[-+]?((\d{1,2}\.?\d{0,1}[1-9])|(\d{0,1}[1-9])) 

,但它不處理這種類型的號碼:

x0 
xy.00 

任何想法?

編輯: 我想對xsd文件做一個限制。

+7

你爲什麼要使用正則表達式來做到這一點? – 2010-01-05 14:09:05

+0

爲什麼使用正則表達式?你不能把它當作一個數字嗎? – 2010-01-05 14:09:28

+0

數字總是有兩位小數,還是'45'也有效?只有'0'無效,或者'0.0'和'0.00'? – 2010-01-05 14:19:09

回答

3

嘗試:

[+-]?([1-9]\d?(\.\d\d?)?|0\.[1-9]\d?||0\.0[1-9]) 

含義:

[+-]?     # optional '+' or '-' 
(     # 
    [1-9]\d?(\.\d\d?)? # 1 - 99.99 
    |     # OR 
    0\.[1-9]\d?   # 0.1 - 0.99 
    |     # OR 
    0\.0[1-9]   # 0.01 - 0.09 
)      # 
+0

數字'0.10','0。11',...'0.99'? – Gumbo 2010-01-05 14:44:12

+0

事實上,在第二個OR-ed部分中忘記了'\ d?'(好!)。 – 2010-01-05 14:47:33

+0

那麼'0.1','0.2',...,'0.9'呢? – Gumbo 2010-01-05 14:50:13

2

嘗試此正則表達式:

^[-+]?([1-9]\d?(\.\d{1,2})?|0\.(\d?[1-9]|[1-9]\d))$ 

這將允許任何數目的以數字開頭比0後跟一個附加的可選數字([1-9]\d?(\.\d{1,2})?)更大。或者,如果以0開頭,後跟一個小數點,然後是一個不允許使用0000\.(\d?[1-9]|[1-9]\d))的序列。

+0

@Gumbo:我做了一點改動,因爲數字「x.y」是不允許的。 用「\。\ d {1,2}」替換「\。\ d {2}」。 ---這適用於我:[ - +]?([1-9] \ d?(\。\ d {1,2})?| 0 \。(\ d?[1-9] | [1 -9] \ d)) – 2010-01-05 14:37:05

+0

@ st.stoqnov:那麼只允許有兩位小數的數字? – Gumbo 2010-01-05 14:42:13

+0

@Gumbo:不可以,不允許帶有一位或兩位小數的數字。 – 2010-01-05 14:58:09

0

好了,你可以簡單地添加兩個案例爲丟失號碼...開始從原來的正則表達式,

[-+]?((\d{1,2}\.?\d{0,1}[1-9])|(\d{0,1}[1-9])|(\d0)|([1-9]\d\.00)|(\d[1-9].00)) 

BTW,而不是\d{1,2}似乎略勝一籌寫\d\d?;類似地\d?而不是\d{0,1}

在任何情況下,這似乎是一個痛苦的練習。你不能使用正則表達式來驗證這是一個你想要的格式的數字,並使用一個單獨的約束來使它不爲零?

0

試試這個

^\d{0,2}(\.\d{1,2})?$/ 
+0

不。接受'0','0.0'和'0.00' – 2010-01-05 14:34:23

相關問題