2013-03-07 76 views
3

我嘗試使用正則表達式來檢查字符串是否僅包含:0-9,A-Z,a-z,\,/或 - 。 我用Regex validator = new Regex(@"[0-9a-zA-Z\-/]*");,不管我介紹的字符串是否有效。正則表達式C#IsMatch()

支票是這樣的:if(!validator.IsMatch(myString))

有什麼不對?

+1

THR的問題是,你的每一個正則表達式匹配字符串,因爲你在問題中的狀態。 – Jodrell 2013-03-07 16:24:46

+1

哪些字符串有效?或者你試圖匹配哪個字符串爲無效的? – 2013-03-07 16:24:47

+1

星號運算符表示「匹配零次或多次」。每個字符串包含至少零次的每個字符類。 – 2013-03-07 16:26:28

回答

4

如果我明白你想要什麼。我相信你的模式應該是

new Regex(@"^[0-9a-zA-Z\\\-/]*$"); 

^$符號分別匹配字符串的開頭和結尾是,錨。如果沒有這些,該模式將匹配任何包含該類中任何字符的字符串。與它們匹配的字符串只有包含該類中的字符。

您還指定要包含反斜槓字符,但原始圖案在字符類中有\-。這只是字符類中連字符的轉義序列。要在字符類中包含反斜槓,則需要單獨指定(也要轉義)。所以得到的字符類有\\(反斜槓),然後是\-(連字符)。

現在,這仍然會匹配空字符串,因爲*表示「零或多」。如果你想只匹配非空字符串使用:

new Regex(@"^[0-9a-zA-Z\\\-/]+$"); 

+的意思是「一個或更多的」。

+0

什麼意思?一個或多個?那是什麼意思??? – LearnByReading 2016-03-09 17:58:23

+0

@LearnByReading「+」表示表達式將匹配前一個字符,字符類或組的一個或多個實例。它被稱爲[*量詞*](https://msdn.microsoft.com/en-us/library/3206d374(v = vs.110).aspx)。 – 2016-03-09 18:28:20

0

如果我寫形式的正則表達式

"[some character class]*" 

它將每個字符串匹配。每個字符串都包含0到許多字符類。

也許你想使用

new Regex(@"[0-9a-zA-Z\-/]+") 

指定1到你的許多字符類的。

0

使用+而不是*

new Regex(@"[0-9a-zA-Z\-/]+");