匹配不包含标签对的正则表达式

Match regex that doesn't contain pair of tags

我构建表单以创建自定义 WebForms 母版页。如果将放置在母版页内的自定义文本不包含 <%%> 标签以及它们之间的任何文本,我需要使用正则表达式进行验证。输入可以有多行。

有效输入:

function() thisCanBeAlsoJavascript() {
    alert("this is safe");
}

输入无效:

function() notFunny() {
    alert("I think it's not safe");
    console.log("And this");<% System.Web.HackEverything(); %>

    <%
    Console.WriteLine("This looks dangerous");
    %>
}
Some more text

我该怎么做?我知道我需要使用环顾四周来找到解决方案。我为多行文本尝试了类似 ^(?<!<%)[\s\S]*(?!%>) 的方法,但它匹配整个无效文本。我应该改变什么?

编辑: 为了清楚起见——我使用 C# DataAnnotations 和 RegularExpressionAttribute 来验证我的字符串。这就是为什么我需要与我的输入不匹配的正则表达式。

试试这个

^(?!.*<%.*%>).*

允许所有不包括 <% ... %>

如果 c# == js 比你需要用 [\s\S] 替换所有 .。否则只需为多行添加 m 标志。 m 无论如何都需要将 ^ 匹配到字符串的开头。

https://regex101.com/r/L1Q1lf/1