【发布时间】:2013-10-16 10:07:40
【问题描述】:
我需要一个正则表达式来使用 RegularExpressionAttribute 验证用户名。它应该匹配不包含requestPathInvalidCharacters 的任何默认值的用户名(,*,%,&,:,\,?)。
所以应该匹配
啊发。
aaf8-a
阿发
不应该匹配
aa<faaaf>a
aaf*a
阿发*
aaf%a
aaf&a
aaf:a
aaf\a
aaf?a
到目前为止,我一直在调整这个正则表达式,但在其中一种情况下它仍然失败......
^(?!.*(<|>|\*|%|&|:|\\|\?).*)$
[Fact] public void CanValidateAgainstInvalidCharacter() { var result = true; Assert.True(result);
var listWeDontWant = @"<,>,*,%,&,:,\,?";
var inner = listWeDontWant.Split(',').Select(x => Regex.Escape(x)).Aggregate((s, s1) => s + "|" + s1);
//inner = @"\\";
var pattern = @"^(?!.*(" + inner + ").*)$";
Debug.WriteLine(pattern);
//var isMatch = ;
//Debug.WriteLine(isMatch);
pattern = @"^[^<>*%&:\\\?]+$";
Assert.False(Regex.IsMatch("aaf\a", pattern));
// Assert.True(Regex.IsMatch("aafa.", pattern));
// Assert.True(Regex.IsMatch("aaf8-a", pattern));
//Assert.True(Regex.IsMatch("aafa", pattern));
//Assert.True(Regex.IsMatch("aafa", pattern));
//Assert.True(Regex.IsMatch("aa,fa", pattern));
//Assert.True(Regex.IsMatch("aafa", pattern));
//Assert.False(Regex.IsMatch("aa<fa", pattern));
//Assert.False(Regex.IsMatch("aaf>a", pattern));
//Assert.False(Regex.IsMatch("aaf*a", pattern));
//Assert.False(Regex.IsMatch("aafa*", pattern));
//Assert.False(Regex.IsMatch("aaf%a", pattern));
//Assert.False(Regex.IsMatch("aaf&a", pattern));
//Assert.False(Regex.IsMatch("aaf:a", pattern));
//Assert.False(Regex.IsMatch("aaf\a", pattern));
//Assert.False(Regex.IsMatch("aaf?a", pattern));
}
【问题讨论】:
-
是在猜测其中哪一种情况在部分游戏中失败了吗?如果没有,也许你可以告诉我们。
-
猜谜不是游戏的一部分。然而,当我调整表达式时,它开始在这些测试之一中失败。让我用我一直在使用的测试用例来更新我的问题。
标签: .net regex asp.net-mvc