在所有输入上触发自定义Regex验证

7kqas0il  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(115)

我正在编写一个.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验证工作,因为我可以证明它与在线工具。我做错了什么?

z9zf31ra

z9zf31ra1#

如果你看一下RegularExpressionAttribute的文档,它说:
指定ASP.NET动态数据中的数据字段值必须与指定的正则表达式匹配。
所以你的属性是做与你想要的完全相反的事情。尝试使用:

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

相关问题