以下演示在网上运行得很好,但是当我尝试在c#/ .NET中运行它时
var regex = new RegularExpressionAttribute(@"@(?!.*?\.\.)[^@]+$");
Assert.IsTrue(regex.IsValid("bob@bob.com"));
Run Code Online (Sandbox Code Playgroud)
这是一个链接到帖子,将解释正则表达式和我想要做的事情
该RegularExpressionAttribute需要串的全场比赛.
在你的情况下,你只是从@角色开始匹配,所以你从你的字符串之间的某个地方开始.这对于RegularExpressionAttribute来说还不够好.你可以想到它^在你的表达式的开头添加一个隐含的(并且$在结尾处也是隐式的,所以你也可以删除它).
所以要解决这个问题,你需要确保它在开始时有匹配的内容,例如.*?:
new RegularExpressionAttribute(@".*?@(?!.*?\.\.)[^@]+");
Run Code Online (Sandbox Code Playgroud)
然后它的工作原理.您不需要任何其他正则表达式标志.
不幸的是,RegularExpressionAttribute文档中没有提到这种行为.您可以在参考源中验证它:
// 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);
Run Code Online (Sandbox Code Playgroud)
所以它在技术上不是添加的^,$但在找到匹配后,需要开始和结束索引来匹配字符串的开始和结束索引(这基本上是相同的事情).
如果你考虑一下,这种行为对验证很有意义.毕竟,您希望确保字符串与某个完整指定的格式匹配,而不仅仅是检查某个子字符串是否有效.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |