2015-10-14 44 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