如何在 ASP.NET MVC 模型验证中检查字符串是不是包含 HTML 代码?

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 模型验证中检查字符串是不是包含 HTML 代码?【英文标题】:How to check if a string contains HTML code in ASP.NET MVC model validation?如何在 ASP.NET MVC 模型验证中检查字符串是否包含 HTML 代码? 【发布时间】:2016-06-12 12:26:17 【问题描述】:

我有一个模型字符串,看起来像:

bla bla bla <b>asdad</b> bla bla bla bla <u>bla</u> ...

我的模特:

public class MyModel 
      [RegularExpression( @"^(<\s*([^ >]+)[^>]*>.*?<\s*\/\s*\1\s*>)$", ErrorMessage = "No tag is allowed !")]
      public string Text  get; set; 

我试图否定上面的正则表达式(我知道我没有正确使用,我不知道如何正确地做到这一点)

我想在Text包含任何匹配的html代码时显示错误,即使它没有封闭标签,意思是遇到时应该发生:

&lt;b&gt; 没有&lt;/b&gt;

&lt;/b&gt; 或类似

如何使用正则表达式实现这一点?

【问题讨论】:

我在 regex101 中尝试过,但不起作用意味着任何不是 html 标记的单词都不会突出显示 你最好在标题和这篇文章中明确这一点,而不是在评论中。这将使愿意提供帮助的人更容易。 【参考方案1】:

这是它的正则表达式:

<(\s*[(\/?)\w+]*)

它会检查是否存在单个结束标记或开始标记,它是否匹配。

DEMO here

【讨论】:

好的,上面的正则表达式可以取反吗? 否定表示,不应该匹配html标签(字符串中不应该有html标签)? 是的,完全正确...如果可能的话,我希望突出显示不在&lt;&gt; 之间的所有文本... 你可以像这样使用:^((?![&lt;&gt;]).)*$ 这看起来不太可靠——它会匹配“5 is 【参考方案2】:

如果模型字符串不包含 HTML 标记,则以下正则表达式匹配:

^((?!\<(|\/)[a-z][a-z0-9]*>).)*$

演示是HERE

【讨论】:

更新了正则表达式。我之前误解了。

以上是关于如何在 ASP.NET MVC 模型验证中检查字符串是不是包含 HTML 代码?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 模型验证

ASP.NET MVC 4 模型验证

在 Asp.Net MVC 中禁用模型验证

asp.net mvc 中模型验证如何处理数组呢?

如何更改 ASP.NET MVC 中 int 模型验证的 ErrorMessage?

如何在 ASP .NET MVC 中仅验证模型的一部分?