2010-04-27 38 views
0

我想要拿出一个验证表达式,以防止用户输入html或javascript标签到网页的评论框中。负面展望排除HTML标记

下工作正常,文字的一行:

^(?!.*(<|>)).*$ 

..但它不会允许因为点中的任何换行符()。如果我像这样的东西去:

^(?!.*(<|>))(.|\s)*$ 

这将允许多个线,但表达只匹配“<”和“>”在第一行。我需要它来匹配任何线。

这工作得很好:

^[-_\s\d\w&quot;'\.,:;#/&\$\%\[email protected]\+\*\\(\)]{0,4000}$ 

,但它的丑陋,我担心它会打破一些用户,因为它是一个多语种的应用程序。

任何想法?谢谢!

+0

人们总是这样对我,当我问正则表达式为html - '使用分析器:) :)好吧,现在认真:你需要说一些关于你使用的技术。你确定\ w会得到非拉丁字母或奇怪的字母吗?你可以用我的'ąćęłóńśżź'作为开始喂食 – naugtur 2010-04-27 21:48:29

+0

调用食谱.... – 2010-04-27 21:58:47

+0

好的,我没有包含任何有关该技术的信息,因为我当时并不认为它是相关的。我想是的。 正则表达式将用于ASP.Net页面上的RegularExpressionValidator标记。所以我们的目标是在表单提交给服务器之前验证标签不存在,即客户端。 – Remoh 2010-04-28 18:07:23

回答

1

请注意,您的RE可以防止用户在任何情况下输入<>。例如,“2 > 1”。这是非常不可取的。

而不是试图用regular expressions to match HTML(它们不太适合做),简单地通过它们转换到&lt;&gt;逃脱<>。或者,为您的语言选择一个实现白名单的软件包,以允许HTML的有限子集,或支持其自己的标记语言(我听说markdown很好)。

至于“。”不匹配换行符,一些正则表达式实现支持一个标志(通常“m”表示“多行”,“s”表示“单行”;后者导致“。”匹配换行符)来控制这种行为。

前两个基本上相当于/^[^<>]*$/,除了这个工作在多行字符串。你为什么没有这样写RE?

+0

该应用程序的DAL已经处理了任何“危险”字符的转义,但我宁愿在两个地方都这样做。我在过去也注意到,客户端的ASP.Net验证器往往会窒息任何看起来像标签的东西,所以我也试图避免这种情况。 – Remoh 2010-04-28 18:08:51

+0

我知道,到目前为止,我所展示的内容将阻止任何'<' and '>'的使用,并且我计划在得到否定性工作后解决这个问题。我会检查一下是否有多行标志。 – Remoh 2010-04-28 18:09:41

0

因此,我研究了它,并且导致“。”的正则表达式存在.Net'SingleLine'选项。以匹配新的一行字符。不幸的是,这在ASP.Net RegularExpressionValidator中不可用。据我所知,没有办法做出像^(?!(< \ w +>))的东西。 $在不进行服务器端验证的情况下工作在多行文本框中。

我接受了你的建议,并走了逃避服务器端标签的路线。这需要将验证页指令设置为'假',但在这个特殊的实例中,这并不是什么大问题,因为评论框是真正唯一需要担心的。