2012-11-22 102 views
3

我試圖修改這個正則表達式,以便讓數字大於或等於1或小於或等於10.此正則表達式允許> = 0或< = 10。整數大於0小於11的正則表達式

我有一個窗體上的文本字段等於或大於0和小於11.我可以使用IF和邏輯運算符TryParse,但我有點像正則表達式。

@"^\d$|^[1][0]$" 
+5

你爲什麼要使用這個正則表達式? – hvd

+0

爲什麼使用正則表達式?假設你在一個字符串中有一個數字(這是正則表達式的類型),你可以將字符串強制轉換爲一個整數 –

+0

我已經將推理添加到了我的原始問題中。謝謝! – Asynchronous

回答

8

你需要修改你的正則表達式只有一點點

@"^[1-9]$|^10$" 

你不需要圍繞單個字符方括號,我會用一組圍繞交替並將其更改爲

@"^([1-9]|10)$" 

看到它here on Regexr

5

答案是這不是你應該使用正則表達式的東西。如果有什麼事情你可以使用正則表達式來解析出號碼,然後用它們進行比較標準if (num >= 0)

// EDIT: replaced regex with this: 
int number; 
if (Int32.TryParse(myString, out number)) { 
    // do something, like: 
    if (number >= 0 || number <= 10) { 

    } 
} 
+0

完全有道理,但我的目標是學習其他方式來做事,並且按照您的建議,我可以使用TryParse和一些操作符,但我想看看如何分配布爾值並使用Regix。 - 謝謝! – Asynchronous

+0

@UnaverageGuy我明白了。是的,我知道你的意思,學習新的做事方式總是很有趣! –

+0

此RegEx甚至不正確。它匹配'0'和'Int32.MaxValue'之間的數字。 –

1

給你:

^(1|2|3|4|5|6|7|8|9|10)$ 

非常明確,不能曲解,一清二楚。爲我提供更好的正則表達式。短期和神祕在這裏沒有必要

3

雖然我建議簡單地使用邏輯運算符來檢查,如果一個int是1到10之間,這裏有一個工作正則表達式:

^(10|[1-9])$ 
1

你可以試試這個:

^([1-9]|10)$ 
4

如果您使用的是WinForms,那麼NumericUpDown控制MinValue等於1MaxValue等於10將做這項工作。你也不需要解析 - 屬性Value將包含你的價值(好吧,它將是decimal類型 - 只需將其投射到int)。

使用NumericUpDown的另一個原因 - 它不允許輸入除數字以外的任何內容,並且上下箭頭對用戶說 - 此控件正在等待您的號碼。

+0

這是真的,但看看我會錯過的所有建議?有時候最簡單的方法很少教你。謝謝大家,所有的答案都很有價值! – Asynchronous

+2

+1爲唯一合理的答案。 –

0

使用正則表達式來檢查從1號到10 -

^([1-9] | 10)$