2013-05-21 64 views
2

我試圖找到驗證了許多正則表達式是大於或小於0正則表達式小於或大於0

它必須允許一個數字是1.20,-2,0.0000001,等等。 ..它根本不能爲0,它必須是數字,也意味着它不能是0.00,0.0

^(?=.*[1-9])(?:[1-9]\d*\.?|0?\.)\d*$ 

試過,但它不會允許負

+12

正則表達式是該錯誤的工具。 – SLaks

+4

不要使用數學正則表達式!你在什麼環境下使用這種編程語言? – Bergi

+0

這是關閉:'0 | (\ b0 \ .0+ \ b)'但不完美 – Intermernet

回答

7

我不認爲正則表達式是解決這個問題的適當工具。

爲什麼不使用簡單的條件?

long number = ...; 

if (number != 0) 
{ 
    // ... 
} 

爲什麼要用火箭筒殺死蒼蠅?

+1

更確切的說:如果輸入是一個字符串,則必須先執行'double.TryParse()'或類似的操作。 – joe

+0

@Joe:是的,你說得對。但OP沒有指定他正在使用的語言,所以我不能提供一個更完整的例子... –

+1

@Pierre,因爲它是一個godzila類型飛:)哈哈我真的不想進入爲什麼我需要這個正則表達式,而不是以編程方式進行。但是,無論如何感謝您的輸入。 – Bojan

0

嘗試否定的正則表達式這樣

!^[0\.]+$ 

如果你覺得需要使用正則表達式只是因爲它的存儲可以使用Double.parseDouble()字符串變相成數字類型的字符串。這將有一個額外的好處,檢查字符串是否是一個有效的數字(通過捕獲NumberFormatException)。

0

以一個典型的正則表達式的一個數字,說

^[+-]?[0-9]*(\.[0-9]*)?$ 

,然後要求前或小數點後有是一個非零數字。根據您的例子,你是不是小數點前預期前導零,所以一個簡單的正則表達式可能是

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

然後決定你仍然想使用正則表達式這一點。

1

剛試過的東西:

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

Online demo

+0

喜歡這個演示,之前使用了一個更糟糕的網站 - 謝謝! –

+0

@MichaSchwab歡迎您注意,它基於PHP PCRE,可能與其他正則表達式引擎不同。 – HamZa

+1

很高興知道,謝謝,但完美,我主要是編寫PHP atm反正:-) –