Regex 否定前瞻排除html标记

Regex 否定前瞻排除html标记,regex,negative-lookahead,Regex,Negative Lookahead,我试图提出一个验证表达式,以防止用户将html或javascript标记输入到网页上的注释框中 以下内容适用于单行文本: ^(?!.*(<|>)).*$ 但它很难看,我担心它会对一些用户造成破坏,因为它是一个多语言的应用程序 有什么想法吗?谢谢 请注意,RE阻止用户在任何上下文中输入。例如,“2>1”。这是非常不可取的 与其尝试使用(他们不太适合这样做),只需通过将它们转换为和来逃避。或者,为您选择的语言找到一个包,该包实现白名单以允许有限的HTML子集,或者支持自己的标记语言(我

我试图提出一个验证表达式,以防止用户将html或javascript标记输入到网页上的注释框中

以下内容适用于单行文本:

^(?!.*(<|>)).*$
但它很难看,我担心它会对一些用户造成破坏,因为它是一个多语言的应用程序


有什么想法吗?谢谢

请注意,RE阻止用户在任何上下文中输入
。例如,“2>1”。这是非常不可取的

与其尝试使用(他们不太适合这样做),只需通过将它们转换为
来逃避
。或者,为您选择的语言找到一个包,该包实现白名单以允许有限的HTML子集,或者支持自己的标记语言(我听说很好)

至于“.”不匹配换行符,一些regexp实现支持一个标志(通常“m”表示“多行”,而“s”表示“单行”;后者导致“.”匹配换行符)来控制此行为


前两个基本上等同于
/^[^]*$/
,但这一个适用于多行字符串。你为什么不这样写RE呢?

因此,我研究了一下,发现正则表达式有一个.Net“SingleLine”选项,它使“.”在新行字符上也匹配。不幸的是,这在ASP.Net RegularExpressionValidator中不可用。就我所见,如果不进行服务器端验证,就无法在多行文本框上使用像^(?)。$这样的东西


我接受了你的建议,选择了在服务器端逃逸标签的方法。这需要将validation page指令设置为“false”,但在这个特定的实例中,这并不是什么大问题,因为注释框是唯一需要担心的问题

当我用regex for html提问时,人们总是这样对我-
使用解析器:)好了,现在说真的:你需要谈谈你使用的技术。您确定a\w会得到非拉丁字母或奇怪的字母吗?你可以用我的
ąćęłśໟź
作为一个startOkay,我没有包括任何关于这项技术的信息,因为我当时认为它不相关。我想是的。regexp将在ASP.Net页面上的RegularExpressionValidator标记中使用。因此,我们的目标是在表单提交到服务器之前,在客户端验证标记是否不存在。该应用程序的DAL已经能够处理任何“危险”字符的转义,但我宁愿在这两个地方都这样做。我还注意到,在过去,客户端ASP.Net验证器往往会被任何看起来像标记的东西卡住,因此我也在努力避免这种情况。我知道,到目前为止,我所展示的内容将阻止使用“”,我正计划在否定生效后解决这一问题。我来看看是否有多行标志。
^(?!.*(<|>))(.|\s)*$
^[-_\s\d\w&quot;'\.,:;#/&\$\%\?!@\+\*\\(\)]{0,4000}$