Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式问题(在asp.net MVC5中)_C#_Regex_Asp.net Mvc - Fatal编程技术网

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的解释,非常有用。