2015-10-14 75 views
0

我嘗試檢查,如果字符串匹配GetInvalidFileNameChars()檢查字符串匹配GetInvalidFileNameChars()

我想用正則表達式

所以我把GetInvalidFileNameChars()的字符轉換成字符串,然後檢查

if Regex.IsMatch(id, stringInvalidFileName) 

我想如果id = "4711./"然後Regex.IsMatch(id, stringInvalidFileName)

應該是真實的,但它是假

我的錯誤是什麼,爲什麼它是假的?!在此先感謝

回答

2

爲什麼使用正則表達式?

這將很好地工作:

string s = "4711./"; 
if (Path.GetInvalidFileNameChars().Any(c => s.Contains(c)) 

由於Rawling分列如下,當你在處理大型字符串它可能是更有效地使用Intersect代替:

string longString = "Something much, much longer than this"; 
if (longString.Intersect(Path.GetInvalidFileNameChars()).Any()) 

相對較短字符串(例如文件路徑)可能沒有什麼好處。在我看來,我更喜歡第一種選擇,因爲它更清楚地表達了代碼的意圖。

+0

或者您可以使用'Intersect'而不是'O(n^2)':p – Rawling

+0

'一旦找到匹配項,'Contains'立即返回,其中'Intersect'總是需要枚舉整個字符串,所以我懷疑'Intersect'會給你任何真正的好處。 – Rik

+0

'相交(...)。任何()'一旦找到匹配就停止,並且只迭代每個輸入一次。 – Rawling