我正在编写.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
消息出现。必需属性工作正常,如果我尝试一个简单的正则表达式,如:
[RegularExpression("[a-z]", ErrorMessage = "Invalid character")]
这按预期工作100%,让我相信我的正则表达式是不正确的,我知道它适用于HTML验证,因为我可以用在线工具证明它。我做错了什么?
答案 0 :(得分:2)
如果您查看RegularExpressionAttribute的文档,它会声明:
指定ASP.NET动态数据中的数据字段值必须与指定的正则表达式匹配。
因此,您的属性与您想要做的完全相反:
[RegularExpression(@"^(?!.*<.*>).*$", ErrorMessage = "Invalid character")]