C# 正则表达式问题(在asp.net MVC5中)
希望有人能用正则表达式指出我缺少的东西 以下是我的模型中的数据项:-C# 正则表达式问题(在asp.net MVC5中),c#,regex,asp.net-mvc,C#,Regex,Asp.net Mvc,希望有人能用正则表达式指出我缺少的东西 以下是我的模型中的数据项:- [Display(Name = "Serial to Search")] [MaxLength(12)] [RegularExpression(@"ABC|WXYZ\w{8,9}")] public string SerialNo { get; set; } 这应该允许我匹配以ABC或WXYZ开头的序列,并且还有8或9个字符/数字 在我看来,我正在使用jquery不引人注目的验证和@Html.validationMessag
[Display(Name = "Serial to Search")]
[MaxLength(12)]
[RegularExpression(@"ABC|WXYZ\w{8,9}")]
public string SerialNo { get; set; }
这应该允许我匹配以ABC或WXYZ开头的序列,并且还有8或9个字符/数字
在我看来,我正在使用jquery不引人注目的验证和@Html.validationMessage控件来显示错误
我已使用以下测试字符串在regex101.com上对此进行了测试:-
ABCGC1000BC5
它通过的很好,但在我看来,我得到了一个验证错误,特别是字符串不符合正则表达式的要求。有人能看到我遗漏了什么吗?谢谢
您的正则表达式匹配两种类型的字符串:1)
ABC
或2)WXYZ
,后跟8或9个单词字符。请记住,RegularExpressionAttribute
模式必须匹配整个字符串。即使regex101.com显示了与ABC12
的匹配项,它在您的环境中也不会匹配
您需要使用分组
(ABC|WXYZ)\w{8,9}
^ ^
非捕获组更适合,因为您只是验证字符串,以后不使用捕获:
(?:ABC|WXYZ)\w{8,9}
^^^ ^
RegularExpressionAttribute
搜索精确匹配:如果正则表达式没有锚定到字符串的开头或结尾,那么RegularExpressionAttribute
将有效地为您锚定
这就是regex101.com与您的测试失败之间的区别。如果将正则表达式锚定在regex101.com上,如^ABC|WXYZ\w{8,9}$
,您将看到它失败了
正如Wiktor Stribiżew在评论中指出的那样,原因是正则表达式查找ABC
或WXYZ\w{8,9}
。无论是^ABC$
还是^WXYZ\w{8,9}$
都与ABCGC1000BC5
的测试字符串不匹配
编辑:(请接受Wiktor Stribiżew的答案作为解决方案。这个答案只是为了解释在regex101.com和ASP.NET上运行它的区别)。使用分组,
(ABC | WXYZ)\w{8,9}
@Wiktor Stribiżew我不敢相信这是真的。非常感谢。请将此添加为解决方案,以便我可以接受。谢谢你的快速回复。贴在下面。我建议使用非捕获版本作为最佳实践。感谢@canton7的解释,非常有用。