2013-04-04 89 views
46

如何通過此正則表達式匹配負數?這個正則表達式可以正常工作,但我希望它也允許負值,例如-10,-125.5等如何在此正則表達式中包含負數小數?

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

感謝

+0

你嘗試過什麼?這似乎應該是一個非常簡單的問題... – 2013-04-04 14:50:44

+0

@DanPuzey你沒有看到他發佈的正則表達式嗎? – Nolonar 2013-04-04 14:51:08

+0

http://www.regexper.com/ – 2013-04-04 14:51:13

回答

87

則應該通過添加-?在開始添加一個可選的連字符(?quantifier意思一個或零出現):

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

我使用下列值對Rubular進行了驗證:

10.00 
-10.00 

和兩個匹配如預期。

+2

你應該避開這個點,即'^ - ?[0-9] \ d *(\。\ d +) ?$'' – 2013-04-04 14:54:36

+9

如果有可能需要明確捕獲正數(+10.00,在某些應用中使用),您可以使用'^ [ - +]?[0-9] \ d *(\。\ d +)? $' – Cemafor 2013-04-04 14:55:57

+1

好的回答+1。 – 2014-01-28 18:48:56

77

一些正則表達式的例子:

正整數

^\d+$ 

負整數

^-\d+$ 

整數

^-?\d+$ 

正數

^\d*\.?\d+$ 

負數

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

正數還是負數

^-?\d*\.{0,1}\d+$ 

電話號碼

^\+?[\d\s]{3,}$ 

電話與代碼

^\+?[\d\s]+\(?[\d\s]{10,}$ 

年份1900至2099年

^(19|20)[\d]{2,2}$ 

日期(年月日,d/M/YYYY等):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$ 

IP V4

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$ 
8

我不知道爲什麼你需要首先[0-9]

嘗試:

^-?\d*(.\d+)?$ 

更新

如果你想確保你對個位數字,然後用

^-?\d+(.\d+)?$ 
+1

可能只是爲了保證某個地方的數字,'^ - ?\ d +(\。\ d +)?$'應該可以工作,如果是這樣的話 – Cemafor 2013-04-04 15:01:03

+0

@Cemafor的確,謝謝。更新了答案 – 2013-04-04 15:17:02

0

只需添加一個0或1令牌:

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

安德烈打敗了我,他也是這樣,不需要[0-9]令牌。 – BanksySan 2013-04-04 14:55:44

1

這將允許-+字符隨後僅當由一個數字:

^([+-](?=\.?\d))?(\d+)?(\.\d+)?$ 
1

修訂版(13/08/2014):這是爲正數和負數的最佳代碼=)

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

我試着用這個數字和正常工作:

-1234454.3435 
-98.99 
-12.9 
-12.34 
-10.001 
-3 
-0.001 
-000 
-0.00 
0 
0.00 
00000001.1 
0.01 
1201.0000001 
1234454.3435 
7638.98701 
+0

將' - *'更改爲' - ?',因爲它符合'-------------'。 – Toto 2014-08-13 07:13:56

+0

我做了一些額外的更改,現在工作正常。請檢查=) – 2014-08-13 18:18:53

1

這將異體w ^正反兩方面的整數

ValidationExpression = 「^ - ?[0-9] \ d *(\ d +)$?」

1

我對正則表達式的一些實驗在Django的URL,這從負到正數

^(?P<pid>(\-\d+|\d+))$ 

讓我們大家集中在這個(\-\d+|\d+)部分,而忽略其他要求,這分號|意味着或正則表達式,則負值將匹配的Wi此\-\d+部分,並且正值代入此\d+

0

對於負數只,這是完美的。

^-\d*\.?\d+$ 
-1
^[+-]?\d{1,18}(\.\d{1,2})?$ 

接受正或負的十進制值。

0

正則表達式數,可選的小數點,可選的負:

^-?(\d*\.)?\d+$; 

作品負整數,小數,負數十進制