2015-01-20 55 views
0

我試圖(^[0]?)\.*(?=.*[1-9])\d{1,3}?$表達式來匹配輸入值應該只接受0。[001〜999],現在的問題是:正則表達式匹配準確0。[001至999]

它是匹配012或090等等。

我想要的表達精確匹配0。001 - 999]

任何幫助理解。

感謝, 斯里蘭卡

+0

有沒有錯'^ 0 \。\ d \ d \ d $'? – 2015-01-20 23:15:22

+0

匹配0.000,但是,是的,這應該基本上工作 – cbreezier 2015-01-20 23:16:30

+1

是的,我最終意識到這一點。應該是'0 \。(?: 00 [1-9] | 0 [1-9] [0-9] | [1-9] [0-9] [0-9])$' - 唉! – 2015-01-20 23:22:42

回答

3

你有它匹配0個或更多\.*。它匹配0,所以你得到像012

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

匹配的東西匹配一個0,然後.,然後[0-9]兩次,然後[1-9]

編輯:喬納森是對的,這不正確匹配像0.010

^0\.[0-9]{3}$ 

然後確保它不是0.000工作。

或者試試這個醜:^0\.(?:[0-9]{2}[1-9]|[0-9][1-9][0-9]|[1-9][0-9]{2})$

+1

這不會識別0.010,這可能是必需的。 0.001 .. 0.999是耐人尋味的。 – 2015-01-20 23:16:24

+1

嗯,是的,最簡單的解決方案是通過另一個正則表達式/簡單字符串比較來運行它,它明確禁止了'0.000'的情況,然後只是'\ d {3}'。 另一種在一個正則表達式中使用它的醜惡方式可能是3種情況:'[1-9] [0-9] {2} | [0-9] [1-9] [0-9] | [ 0-9] {2} [1-9]' – cbreezier 2015-01-20 23:21:06

0

我接受@Crazysheep答案。因爲那引起了這個問題。

(^[0]?)\.(?=.*[1-9])\d{1,3}?$ seems to be working. 

測試在https://www.regex101.com/

謝謝大家快速反應。

+0

(a)這可能應該是評論,或者是接受的答案或者是你的問題,或者是編輯成問題。 (b)您是否檢查過0.010,0.100等?它們應該匹配嗎?他們匹配嗎? – 2015-01-20 23:31:11

+0

0.010,0.100應匹配並匹配。我通過刪除*字符獲得了表達式,並且我沒有嘗試Crazysheep提供的解決方案,但我通過他的答案得到了答案。我會把它寫成評論,謝謝你指點我。 – Sri 2015-01-20 23:47:25

+0

@Sri我只想指出你的正則表達式匹配諸如'0.1'和​​'0.01'的東西。這也有點複雜 - 在正則表達式引擎的內部工作方式和使用預覽功能的工作方式之間存在一些奇怪的相互作用,但是我會小心謹慎。 – cbreezier 2015-01-20 23:51:57