正则表达式适用于在线正则表达式测试程序但不适用于.NET

以下演示在网上运行得很好,但是当我尝试在c#/ .NET中运行它时却没有

var regex = new RegularExpressionAttribute(@"@(?!.*?\.\.)[^@]+$"); Assert.IsTrue(regex.IsValid("bob@bob.com")); 

这是一个链接到post,将解释正则表达式和我想做的事情

RegularExpressionAttribute需要字符串的完全匹配。

在你的情况下,你只是从@字符开始匹配,所以你从你的字符串之间的某个地方开始。 这对于RegularExpressionAttribute来说还不够好。 你可以想到它在你的表达式的开头添加一个隐式^ (最后也是一个隐式$ ,所以你也可以删除它)。

所以要解决这个问题,你需要确保它在开始时有匹配的内容,例如a .*?

 new RegularExpressionAttribute(@".*?@(?!.*?\.\.)[^@]+"); 

然后它的工作原理。 您不需要任何其他正则表达式标志。


不幸的是,在文档中没有提到RegularExpressionAttribute这种行为。 您可以在参考源中validation它:

 // We are looking for an exact match, not just a search hit. This matches what // the RegularExpressionValidator control does return (m.Success && m.Index == 0 && m.Length == stringValue.Length); 

所以技术上不是添加^$但是在找到匹配后,需要开始和结束索引来匹配字符串的开始和结束索引(这基本上是相同的事情)。

如果你考虑一下,这种行为对validation很有意义。 毕竟,您希望确保字符串与某个完整指定的格式匹配,而不仅仅是检查某个子字符串是否有效。