2010-09-14 66 views
2

我可以選擇使用正則表達式來驗證一些值,我想知道最好的方法來做到這一點。正則表達式來驗證幾個值的範圍(.NET)

我有幾個範圍(不是在同一正則表達式/驗證)如1-9(這是很容易:P),和:

1-99
1-999
1-9999

此外,我需要檢查前導零,所以,0432是一個可能的匹配。

我知道Regex可能不是最好的方法,但這是我的,也是我必須使用的框架的一部分。

+1

請詳細說明您想要的內容,最好使用有效值和無效值的示例。 – 2010-09-14 12:02:01

回答

0

最簡單的方法(ñ是數字量):

[0-9]{n} 
+0

你好鮑比。我試過這種方式。但有時候我不想要第一個0。 – 2010-09-14 12:30:37

0

我你想要什麼不是100%清楚,但或許這樣的東西嗎?

\d{1,2} 

這是相當於\d\d?和將匹配任何一個或兩個位數字,即任何數量的從0到99,其中包括前導零。

如果你真的想排除0,然後事情就變得很多更加複雜。

基本上,您需要明確檢查1-9和01-09。允許號碼的第三組將有兩位是做開始以零:

0?[123456789]|[123456789]\d 

現在|之前的部分將檢查它是否是低於10的數字,可選的前導零。第二個選擇將檢查它是否是從0開始的兩位數字而不是

其餘範圍可以通過擴展來檢查。

1

有一個根本缺陷與所有其他答案!

bool isMatch = Regex.IsMatch("9999", @"\d{1,3}"); 

雖然數字不是1-3位數,但返回true。這是因爲單詞的一部分與表達式匹配。

您需要使用:

bool isMatch = Regex.IsMatch("9999", @"^\d{1,n}$"); 

其中N是最大位數。

UPDATE

爲了確保它不爲零,將其更改爲以下:

bool isMatch = Regex.IsMatch("9999", @"(^\d{2,n}$)|[1-9]"); 

更新2 它仍然如果我們是行不通的00或000或0000.我的大腦受傷了,我會再看看。我們可以將它作爲兩個表達式(「(^ \ d {2,n} $)| [1-9]」和NOT(0)|(00)|(000)|(0000)),但可能不是接受爲一個單一的正則表達式答案。