匹配不包含标签对的正则表达式
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
无论如何都需要将 ^
匹配到字符串的开头。
我构建表单以创建自定义 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
无论如何都需要将 ^
匹配到字符串的开头。