ASP.NET MVC 正则表达式属性不适用于括号(文字)

Posted

技术标签:

【中文标题】ASP.NET MVC 正则表达式属性不适用于括号(文字)【英文标题】:ASP.NET MVC RegularExpression Attribute Not Working with Parenthesis (literal) 【发布时间】:2020-03-23 19:20:01 【问题描述】:

这是我在 c# 中的示例正则表达式。

[RegularExpression(@"^[0-9]4-[0-9]4|\x28[0-9]3,5\x29$", ErrorMessage = "Invalid Format. xxxx-xxxx or xxxx-xxxx (xxxxx)")]

我已经尝试了这两个正则表达式,但仍然无法正常工作。

^[0-9]4-[0-9]4|\([0-9]3,5\)$ ^[0-9]4-[0-9]4|\x28[0-9]3,5\x29$

这是 html 输出

data-val-regex-pattern="^[0-9]4-[0-9]4|\x28[0-9]3,5\x29$"

所需的输出样本

1234-1234 1234-1234 (123) 1111-1111 (11111) ...

我正在https://regex101.com/ 测试正则表达式,并按预期工作,但在我的 c# 代码中没有。

即使输入有效,验证仍会触发

【问题讨论】:

@JakubRusilko 示例代码是什么意思? c#代码、razor代码还是html部分? 忽略我之前的评论 - 我删除了它。没有注意到您在属性中使用它。在下面试试我的答案。 我编辑了我的问题,因为 *** 也逃脱了我在问题中提出的强烈反对。 好的,那么“代码不起作用”到底是什么意思? 即使输入有效,验证也会触发。 【参考方案1】:

问题是这个正则表达式确实匹配,但它不是完全匹配 - 只是部分匹配。使用这个:

^[0-9]4-[0-9]4( \([0-9]3,5\))?$

您的版本是另一种选择:第一部分或第二部分。我的版本是:始终是第一部分,也可能是第二部分(如果存在)。

【讨论】:

是的,但( \([0-9]3,5\))* 必须可能是( \([0-9]3,5\))?,即允许它出现一次或零次。 你说得对,维克托。我的错。修复了答案,谢谢。 @JakubRusilko 这是有效的。谢谢。也感谢 Wiktor。

以上是关于ASP.NET MVC 正则表达式属性不适用于括号(文字)的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

@Html.HiddenFor 不适用于 ASP.NET MVC 中的列表

ASP.NET MVC 验证不适用于引导模式

RedirectToAction 不适用于 Tempdata - ASP.net 核心 MVC

ValidateAntiforgeryToken 不适用于 ASP.NET MVC 中的 Ajax

Elmah 不适用于 asp.net mvc