首页 > 解决方案 > 在所有输入上触发自定义正则表达式验证

问题描述

我正在编写一个 .NET MVC 应用程序并使用不显眼的验证来根据我的模型中的数据注释来清理我的客户端输入。我有一个输入,我不想让 HTML 标记进入,并且希望在输入 html 标记时显示自定义错误消息。因此,我创建了一个带有自定义正则表达式的数据注释来涵盖这些条件,如下所示:

[Required(ErrorMessage = "You must provide a First Name.")]
[RegularExpression(@"<[a-z][\s\S]*>", ErrorMessage = "Invalid character")]
[DisplayName("First Name")]
public string FirstName { get; set; }

与此有关的问题是,无论是什么字符,是否是<test>或是否abc会导致Invalid Character消息出现。required 属性工作正常,如果我尝试一个简单的正则表达式,例如:

[RegularExpression("[a-z]", ErrorMessage = "Invalid character")] 

这按预期 100% 有效,让我相信我的正则表达式不正确,但我知道它适用于 HTML 验证,因为我可以使用在线工具证明这一点。我究竟做错了什么?

标签: regexasp.net-mvcvalidation

解决方案


如果您查看 RegularExpressionAttribute 的文档,它会指出:

指定 ASP.NET 动态数据中的数据字段值必须与指定的正则表达式匹配。

因此,您的属性与您想要做的完全相反:

[RegularExpression(@"^(?!.*<.*>).*$", ErrorMessage = "Invalid character")]

推荐阅读