如何使用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字符串。