javascript 如何判断一个字符串是否包含HTML实体(如&)?

v6ylcynt  于 2023-03-16  发布在  Java
关注(0)|答案(3)|浏览(153)

我正在尝试编写一个函数,该函数针对特殊HTML实体数组检查参数(例如用户输入了'&amp'而不是'&'),然后在这些输入的实体周围添加一个span。
我该怎么搜索字符串参数来找到它呢?它会是一个正则表达式吗?
这是我目前编写的代码:

function ampersandKiller(input) {
 var specialCharacters = ['&', ' ']
 if($(specialCharacters).contains('&')) {
     alert('hey')
 } else {
     alert('nay')
 }
}

显然这行不通。有人有什么主意吗?
因此,如果传入一个字符串,如My name is &amp;,它将呈现My name is <span>&amp;</span>。如果一个特殊字符被列出两次--如'I really like &amp;&amp;&amp;,它将只呈现每个元素周围的span。用户还必须能够使用普通的&

c3frrgcw

c3frrgcw1#

function htmlEntityChecker(input) {
    var characterArray = ['&amp;', '&nbsp;'];
    $.each(characterArray, function(idx, ent) {
        if (input.indexOf(ent) != -1) {
            var re = new RegExp(ent, "g");
            input = input.replace(re, '<span>' + ent + '</span>');
        }
    });

    return input;
}

FIDDLE

qc6wkl3g

qc6wkl3g2#

您可以使用以下正则表达式查找并 Package 实体:

input.replace(/&amp;|&nbsp;/g, '<span>$&</span>')

对于任何类型的实体,您也可以使用以下命令:

input.replace(/&(?:[a-z]+|#\d+);/g, '<span>$&</span>');

它匹配“word”实体以及数字实体。例如:

'test & &amp; &#60;'.replace(/&(?:[a-z]+|#x?\d+);/gi, '<span>$&</span>');

输出:

test & <span>&amp;</span> <span>&#60;</span>
tyky79it

tyky79it3#

另一个选择是让浏览器为你解码并检查长度是否有任何不同...检查this question以查看如何取消转义实体。然后你可以比较原始字符串的长度和解码后的长度。示例如下:

function htmlDecode(input){
    var e = document.createElement('div');
    e.innerHTML = input;
    return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
function hasEntities(input) {
    if (input.length != htmlDecode(input).length) {
       return true;
    }
    return false;
}
alert(hasEntities('a'))
alert(hasEntities('&amp;'))

上面将显示两个警报。第一个是false,然后是true。

相关问题