html - 为什么这个用于验证危险 html 的 ASP.NET RegularExpressionValidator 不起作用?

标签 html asp.net regex validation

看完ASP.NET request validation causes: is there a list?关于导致 ASP.NET 提示危险输入的原因的帖子我决定编写自己的正则表达式以在 RegularExpressionValidator 中使用。

我创建了一个正则表达式来测试 Travis 接受的答案中的第 2 点和第 3 点...

  • 2 - If the & character is in a &# sequence (e.g.,   for a non-breaking space), it's a "dangerous string."
  • 3 - If the < character is part of <x (where "x" is any alphabetic character a-z), <!, </, or <?, it's a "dangerous string."

^(.)(#)+|(<[a-zA-Z!/\?])+(.)$

regexlib.com 上使用测试器似乎效果很好因为它符合您的所有期望,没有您不期望的。

但是当我在 ASP.NET RegularExpressionValidator 上使用表达式时,验证器会触发任何文本!它在 Firefox 或 IE 上做同样的事情,无论 EnableClientScript 是真还是假。我使用的是 .NET 4.5.1,但我不认为这会有什么不同。 关于为什么以及如何修复它或为什么它不起作用的任何想法?

最佳答案

我没有研究 ASP.NET RegularExpressionValidator 和 regexlib.com 的解析器之间的区别,但我敢打赌你的正则表达式有问题。

当我在 regexpal.com 上尝试您的正则表达式时,它与我期望的任何内容都不匹配(也许我还没有正确理解这些要求)。

编辑

以下将匹配包含以下字符串的字符串:

  • &#
  • <a-z
  • <!
  • </
  • <?

这里是:

^((?!(&#)|(<[a-zA-Z!/\?])).)*$

See it in action at RegexPal.com

请参阅this question有关反正则表达式的详细信息。

我的原始答案(与要求相反)

我想出了这个允许点 2 前后的任何字符或点 3 前后的任何字符

这里是:

^.*(&#)+.*$|^.*(<[a-zA-Z!/\?])+.*$

View on RegexPal

关于html - 为什么这个用于验证危险 html 的 ASP.NET RegularExpressionValidator 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21477194/

相关文章:

c# - IE7/8 : PDF file won't download with HTTP GET

c# - 如何手动将项目添加到 Repeater 控件

javascript - 如何使用正则表达式获取标签内容?

html - 如何仅使用 CSS 禁用链接

html - 如何在图像上正确创建标签 friend div 贴在图像上?

c# - 拦截对象到达Controller

java - 如何使用正则表达式从头到尾匹配 block

regex - 字符串中字符位置的转义字符 : R lang

html - Safari 的 CSS 间距问题?

javascript - 如何使菜单行响应?