【问题标题】:Custom Regex validation firing on all inputs在所有输入上触发自定义正则表达式验证
【发布时间】:2018-10-05 06:08:02
【问题描述】:

我正在编写一个 .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; }

问题在于,无论是什么字符,无论是&lt;test&gt; 还是abc,都会导致出现Invalid Character 消息。 required 属性可以正常工作,如果我尝试使用简单的正则表达式,例如:

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

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

【问题讨论】:

  • 使用@"&lt;[a-z][\s\S]*&gt;"
  • @WiktorStribiżew 我已经尝试过这种方法,但又做了一次,结果还是一样。验证对所有值触发。另外,我不太确定我的问题是如何与链接的问题重复的?也许我很笨,但我不明白它是如何回答我的问题的。
  • 好的,这意味着您只想在字符串包含 &lt;{LETTER}{anything_here}&gt; 时显示错误,对吗?可能你想要@"^.*&lt;[a-zA-Z][^&gt;]*&gt;.*$"
  • @WiktorStribiżew 是的,我的目标是像 &lt;test&gt;a &lt;test&gt; 这样的字符串失败,但没有 html 实体的输入都可以正常工作。遗憾的是,正则表达式也不起作用,当我在文本框中输入a 时,会触发验证警告。
  • @WiktorStribiżew 完成

标签: regex asp.net-mvc validation


【解决方案1】:

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

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

所以你的属性与你想做的完全相反:

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

【讨论】:

  • 天哪,你是对的!做到了!不知道我是怎么忽略的,但还是谢谢你!
  • 有时很难看到我们面前的大象,@Halter。也许你应该看看橡皮鸭调试方法;)
  • 你会认为如果它匹配正则表达式,就会抛出错误,但我想不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2019-01-07
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
相关资源
最近更新 更多