正则表达式数据注释以验证Html标签

时间:2013-08-26 22:43:56

标签: c# asp.net-mvc regex data-annotations

这个正则表达式验证包含属性的html标签,有人可以更正此代码在C#RegularExpression中工作。这个表达式的问题是它在第一个引号处停止的引号,因为它是表达式的一部分,没有人知道如何解决这个问题,或者是否有人有替代方法。 P.S有没有人知道一个C#.net正则表达式网站来测试他们的表达式

以下是代码:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>")]

这是在对表达式

添加双引号后的验证输出
 data-val-regex-pattern="&lt;/?\w+((\s+\w+(\s*=\s*(?:&quot;.*?&quot;|&#39;.*?&#39;|[^&#39;&quot;>\s]+))?)+\s*|\s*)/?>"

1 个答案:

答案 0 :(得分:1)

听起来你的问题是字符串文字不能编译为有效的C#。当使用逐字字符串文字(以@开头的字符串文字)时,您可以通过简单地将它们加倍"来转义""个字符。您的代码应如下所示:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>")]

进一步阅读

但是,我建议稍微调整模式,如下所示:

[RegularExpression(@"</?\w+((\s+\w+(\s*=\s*(?:""[^""]*""|'[^']*'|[^'"">\s]+))?)+\s*|\s*)/?>")]

实际上代表了模式:

</?\w+((\s+\w+(\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))?)+\s*|\s*)/?>

如果此模式稍后转换为html,它将看起来像这样:

&lt;/?\w+((\s+\w+(\s*=\s*(?:&quot;[^&quot;]*&quot;|&#39;[^&#39;]*&#39;|[^&#39;&quot;>\s]+))?)+\s*|\s*)/?>
  • &lt;代表编码的<字符
  • &quot;代表编码的"字符
  • &#39;代表编码的'字符