当前位置:  开发笔记 > 编程语言 > 正文

如何使用C#验证字符串是否包含HTML

如何解决《如何使用C#验证字符串是否包含HTML》经验,为你挑选了4个好方法。

有没有人有一种简单有效的方法来检查字符串是否包含HTML?基本上,我想检查某些字段是否只包含纯文本.我想过寻找<字符,但这可以很容易地用在纯文本中.另一种方法可能是使用以下方法创建一个新的System.Xml.Linq.XElement:

XElement.Parse("" + MyString + "")

并检查XElement是否包含子元素,但这似乎对我需要的东西有点重量级.



1> ICR..:

以下内容将匹配任何匹配的标记集.即这个

Regex tagRegex = new Regex(@"<\s*([^ >]+)[^>]*>.*?<\s*/\s*\1\s*>");

以下内容将匹配任何单个标记.即(不必关闭).

Regex tagRegex = new Regex(@"<[^>]+>");

然后你可以像这样使用它

bool hasTags = tagRegex.IsMatch(myString);



2> J c..:

您可以通过使用HttpUtility.HtmlEncode对输入进行编码来确保纯文本.

实际上,根据您希望检查的严格程度,您可以使用它来确定字符串是否包含HTML:

bool containsHTML = (myString != HttpUtility.HtmlEncode(myString));


不幸的是,如果你的字符串包含撇号,&符号等,则不起作用

3> Josef..:

干得好:

using System.Text.RegularExpressions;
private bool ContainsHTML(string CheckString)
{
  return Regex.IsMatch(CheckString, "<(.|\n)*?>");
}

这是最简单的方法,因为括号中的项目不太可能自然发生.



4> Ben Mills..:

我刚尝试了我的XElement.Parse解决方案.我在字符串类上创建了一个扩展方法,因此我可以轻松地重用代码:

public static bool ContainsXHTML(this string input)
{
    try
    {
        XElement x = XElement.Parse("" + input + "");
        return !(x.DescendantNodes().Count() == 1 && x.DescendantNodes().First().NodeType == XmlNodeType.Text);
    }
    catch (XmlException ex)
    {
        return true;
    }
}

我发现的一个问题是纯文本符号和少于字符会导致XmlException并指示该字段包含HTML(这是错误的).要解决此问题,首先传入的输入字符串需要具有&符号,并且少于字符转换为其等效的XHTML实体.我写了另一种扩展方法来做到这一点:

public static string ConvertXHTMLEntities(this string input)
{
    // Convert all ampersands to the ampersand entity.
    string output = input;
    output = output.Replace("&", "amp_token");
    output = output.Replace("&", "&");
    output = output.Replace("amp_token", "&");

    // Convert less than to the less than entity (without messing up tags).
    output = output.Replace("< ", "< ");
    return output;
}

现在我可以使用用户提交的字符串并使用以下代码检查它是否包含HTML:

bool ContainsHTML = UserEnteredString.ConvertXHTMLEntities().ContainsXHTML();

我不确定这是不是防弹,但我认为这对我的情况来说已经足够了.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有