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

问题描述:

我构建表单以创建自定义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 

我怎样才能做到这一点?我知道我需要使用lookaround来达到解决方案。我为多行文本尝试了这样的^(?<!<%)[\s\S]*(?!%>),但它匹配了整个无效文本。我应该改变什么?编辑: 为了清楚起见 - 我使用C#DataAnnotations和RegularExpressionAttribute来验证我的字符串。这就是为什么我需要与我的输入不匹配的正则表达式。

试试这个

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

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

如果C#== JS比你需要的所有.[\s\S]取代。否则只需添加m多行标志。 m无论如何匹配^到字符串的开头。

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

+0

我编辑了我的问题。 我使用C#DataAnnotations和RegularExpressionAttribute来验证我的字符串。该属性检查给定的字符串是否与正则表达式匹配,这就是为什么我需要与你的答案相反的东西。 –

+0

下次请使用更多标签。是C#正则表达式一样JS? – Fallenhero

+0

是的,这正是我要找的。谢谢! –