2011-08-04 39 views
0

我已經得到了我使用的.NET驗證十進制數型正則表達式。我的正則表達式適用於0.5,但不適用於.5(不含前導零)。我不是一個誰創造了這個正則表達式的一個,我不知道他們非常好,所以我想我在這裏問。數字正則表達式幫助

在此先感謝。

當前正則表達式

[-+]?[0-9]*\.?[0-9]+ 

(編輯 - 這是由於這個正則表達式?[ - +] [0-9] * [0-9]我錯過了+底。? ) 驗證失敗,此號碼 450.000000000000

驗證失敗此號碼。 .450

我正在使用的SQL數據庫具有定義爲數字(28,12)的數量,所以我想我需要驗證在這個範圍內任何東西,雖然業務邏輯強制執行的0至9,999.99值。

所以,當我把在用我的驗證的任何數據將用於定義業務規則的工作,我一定要在數據庫中已經佔到數據,因爲它是由另一個系統供電。

編輯:我原來的正則表達式的作品,但不是在我所需要的能力。我需要這個號碼來驗證

.5 

目前我的用戶在此得到一個無效的數字信息。他們可以解決這個問題通過輸入

0.5 

我想我可以添加一些JavaScript以0追加到任意數量然後輸入帶有小數點開始,但是這對我來說是一個黑客,我寧願不這樣做。

+0

最初的正則表達式似乎也適用於.5。無法回溯它。 –

+0

基於這個正則表達式測試網站http://regexhero.net/tester/,我的正則表達式沒有任何問題。相反,Microsoft的正則表達式屬性數據註釋似乎存在問題。我將在MVC3驗證下重新發布此問題。感謝大家。 –

回答

2

正則表達式,你必須現在應該正常工作。這裏是通過正則表達式的每個部分的散步:

[-+]? # matches '-' or '+', optional 
[0-9]* # matches zero or more digits, as many as possible 
\.?  # matches a '.', optional 
[0-9]+ # matches one or more digits, as many as possible 

對於」 0.5" 的第一個兩個部分丟失,但是這將不會失敗比賽。不知道爲什麼你的麻煩,但它可能是與.NET代碼,發佈它,我們可以盡力幫助。

您可能想要嘗試在第一個字符類([\-+])中轉義「 - 」,這不應該是必要的,因爲「 - 」是第一個字符,但是當「 - 」處於字符類時通常指定一個範圍。

+0

我不需要[ - +],所以我會從表達式中刪除 –

+0

我嘗試刪除[ - +],但它不喜歡那樣。然後我刪除了[ - +]?它也不喜歡那樣。這是我現在使用的表達式和我得到的異常。解析「[0-9]?* \。?[0-9]?[0-9] +」 - 嵌套量詞*。 –

+0

這似乎應該工作, –

1
[-+]?[0-9]*\.?[0-9]+ 

轉義問題與「。」。

+0

他的「。」因爲格式化,它只是不可見。 –

+0

是不是隻是最初發布的正則表達式? – phimuemue

+0

@phimuemue - 他在編輯問題之前發佈了它,最初發布的正則表達式未被格式化爲代碼,因此反斜槓不可見。 –

1

http://www.regular-expressions.info/floatingpoint.html

[-+]?[0-9]*\.?[0-9]* 

其實pyroscope了它的權利,並在後面,而不是*

+1

這也可以匹配空字符串,這可能不是有意的。 – Lucero

+0

Acutually,你的變化導致我的問題。我在我的一個驗證中最後錯過了+。我正在驗證多個屬性(使用MVC3 Data Annotations RegularExpression驗證器)。無論如何,在我的一個例子中,我離開了+。現在,這是否解決了最後所有0的問題,或與'。'的問題。領先沒有零? –

+0

您提供的鏈接是我使用原始正則表達式的地方。但是,我不需要+/-選項。我確實需要選擇以小數開頭的數字。也許我應該改變原來的問題。 –

1

正則表達式A +似乎要被罰款,但是處理之後(DB或其他)可能不接受這種格式。

1

使用\d來表示數字。這考慮到了不含前導數字的十進制數字。

^[-+]?(?:\d+(?:\.\d+)?|\.\d+)$ 

此外,非捕獲組(?:regex)使其有更好的表現,因爲發動機必須少做工作捕獲。

+0

我試過這個,並且在編號上失敗了.5 –

+0

@Jeff,你的'.5'中是否有空格? –

+0

@Jeff,它適合我。你是否正確地爲你的語言在正則表達式中轉義了''? –