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

时间:2016-12-16 07:17:20

标签: c# regex asp.net-mvc-validation

我构建表单来创建自定义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来验证我的字符串。这就是为什么我需要与我的输入不匹配的正则表达式。

1 个答案:

答案 0 :(得分:1)

试试这个

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

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

的内容

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

请参阅https://regex101.com/r/L1Q1lf/1