如何使用JavaScript检查字符串是否为HTML?


有时,开发者需要从JavaScript管理HTML。例如,开发者需要通过在JavaScript中访问HTML元素,将一些HTML节点附加到特定的HTML元素。

因此,在我们使用JavaScript将HTML字符串附加到任何HTML元素之前,我们需要评估要附加的字符串并检查其是否有效。

如果我们附加的HTML字符串有开始标签但没有结束标签,则可能会在网页中产生错误。因此,我们将学习使用JavaScript验证HTML字符串的不同方法。

使用正则表达式验证HTML字符串

程序员可以使用正则表达式为字符串创建搜索模式。我们可以按照其规则创建一个正则表达式模式,该模式完美匹配每个HTML字符串。

之后,我们可以使用正则表达式的test()方法,该方法返回作为参数传递的字符串与正则表达式的匹配结果。

语法

用户可以按照以下语法将正则表达式与HTML字符串匹配。

let regexForHTML = /<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)<\/\1>/;
let isValid = regexForHTML.test(string);

在上面的语法中,我们将字符串作为test()方法的参数传递,该参数需要与regexForHTML正则表达式匹配。

正则表达式解释

在这里,我们解释了用于匹配HTML字符串的正则表达式。

正则表达式分为三个部分。

  • <([A-Za-z][A-Za-z0-9]*)\b[^>]*> − 这是正则表达式的第一部分,它匹配HTML字符串的开始标签。它表示开始标签应该包含“<”,之后是一些字母数字字符,最后是“>”。

  • (.*?) − 这是正则表达式的第二部分,它表示字符串在开始标签后至少应包含一个字符。

  • <\/\1> − 这是正则表达式的第三部分,表示HTML字符串应该包含“</”,之后是与第一组相同的值,最后是“>”。

示例

在下面的示例中,我们创建了两个不同的字符串。string1是有效的HTML字符串,而string2是无效的。

我们创建了validateHTMLString()函数,该函数使用test()方法将字符串与正则表达式匹配。

<html>
<body>
   <h3>Using the <i>regular expression</i> to validate the HTML string.</h2>
   <div id = "output"> </div>
   <script>
      let Output = document.getElementById("output");
      
      // Creating the regular expression
      let regexForHTML = /<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)<\/\1>/;
      let string1 = "<b> Hello users! </b>";
      let string2 = "<Hi there!>";
      function validateHTMLString(string) {
         
         // check if the regular expression matches the string
         let isValid = regexForHTML.test(string);
         if (isValid) {
            Output.innerHTML += "The " + string + " is a valid HTML stirng <br/>";
         }else{
            Output.innerHTML += "The " + string + " is not a valid HTML stirng <br/>";
         }
      }
      validateHTMLString(string1);
      validateHTMLString(string2);
   </script>
</body>
</html>

使用HTML元素的nodeType属性

我们可以创建一个虚拟HTML元素,并使用元素的innerHTML属性将字符串作为元素的内部HTML附加。之后,我们可以使用每个子节点的nodeType属性来检查它是否是HTML元素类型。

对于任何HTML元素,其nodeType属性的值都等于1。

语法

用户可以按照以下语法使用HTML元素的nodeType属性验证HTML字符串。

var element = document.createElement("p");
element.innerHTML = string;
var childNodes = element.childNodes;
for (var i = 0; i < childNodes.length; i++) {
   if (childNodes[i].nodeType != 1) {
      
      // string is not valid
      return;
   }
   if (childNodes[i].nodeType == 1 && i == childNodes.length - 1) {
      
      // string is valid
      return;
   } 
}
// string is not valid 

在上面的语法中,我们检查每个子节点的节点类型,以验证字符串是否只包含HTML节点。

步骤

用户可以按照以下步骤实现上述语法。

步骤1 − 创建一个虚拟HTML元素。它可以是div、p或任何其他元素,用于将字符串存储为HTML。

步骤2 − 使用虚拟元素的innerHTML属性,并将字符串作为HTML存储到其中。

步骤3 − 使用childNodes属性获取虚拟元素的所有子节点。

步骤4 − 使用for循环迭代虚拟元素的每个子节点。

步骤5 − 在for循环中,检查每个子元素的节点类型,如果它不等于1,则表示该字符串不是有效的HTML字符串,并从那里返回任何值以终止函数。

步骤6 − 如果你在迭代所有子节点时到达最后一个子节点,并且最后一个子节点也是有效的,则表示HTML字符串是有效的,并返回任何值以终止函数。

示例

在下面的示例中,我们创建了validateHTMLString()函数,该函数实现上述步骤来验证HTML字符串。

<html>
<body>
   <h3>Using the <i> node Type property </i> to validate the HTML string.</h3>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById("output");
      let string1 = "<b> This is an valid HTML! </b>";
      let string2 = "<Hi there!";
      function validateHTMLString(string) {
         var element = document.createElement("p");
         element.innerHTML = string;
         var childNodes = element.childNodes;
         for (var i = 0; i < childNodes.length; i++) {
            if (childNodes[i].nodeType != 1) {
               output.innerHTML += "The string is not valid HTML string! <br/>";
               return;
            }
            if (childNodes[i].nodeType == 1 && i == childNodes.length - 1) {
               output.innerHTML += "The " + string + " is a valid HTML string! <br/>";
               return;
            }
         }
         output.innerHTML += "The string is not valid HTML string! <br/>";
      }
      validateHTMLString(string1);
      validateHTMLString(string2);
   </script>
</body>
</html>

用户学习了三种不同的方法来检查HTML字符串是否有效。最好的方法是使用正则表达式,它允许我们通过编写一行代码来验证HTML字符串。

更新于:2023年3月10日

7K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告