regex - 在所有输入上触发自定义正则表达式验证
问题描述
我正在编写一个 .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 验证,因为我可以使用在线工具证明这一点。我究竟做错了什么?
解决方案
如果您查看 RegularExpressionAttribute 的文档,它会指出:
指定 ASP.NET 动态数据中的数据字段值必须与指定的正则表达式匹配。
因此,您的属性与您想要做的完全相反:
[RegularExpression(@"^(?!.*<.*>).*$", ErrorMessage = "Invalid character")]
推荐阅读
- html - Spring Boot 应用程序 - thymeleaf 会在一段时间后加载图片。某种缓存问题?
- azure - Azure DevOps Pipeline Build Immutable Image (Packer) 找不到脚本
- memory-leaks - 通知程序的潜在内存泄漏
- docker - Docker NGINX sub_filter 在响应中不适用于 HTML-form-item “action”
- node.js - agent.add 不工作,而 console.log 是
- c# - ObserwableCollection 中的 SearchBar 和 List MVVM
- windows - 在 LotusScript 中确定 Windows 剪贴板的内容
- flutter - 如何在等待函数中添加超时
- java - 在 Java 方法中创建对象
- angular - 错误:NullInjectorError:路由器没有提供程序