[英]regular expression to remove all tags with content and html code from a string
我正在寻找开发一个正则表达式,它删除所有 html 标签,其中包含名称、脚本标签、脚本标签中的所有内容(基本上所有 javascript 代码),以及任何 html 代码等,只是字符串中没有 html 或 javascript 代码应该经过。 更新:
我认为被质疑的不是那么清楚,可能这应该更清楚。
我希望字符串中不允许使用'<' and '>'
以及任何特殊字符,例如;,#...
等。我不在乎是否有"<html>" or "<body> "
类的标签"<html>" or "<body> "
等”我只想返回 false 以便用户根本无法输入任何标签,我还想阻止所有 javascript 所以我假设如果我不允许<,>
脚本标签不会通过并且 js 代码不会通过?
因此,正则表达式应该不允许包含任何 <、> 和其他特殊字符,如;#@$%& etc
,以便除标签之外的其他 html 代码也被阻止...例如
要验证 HTML 元素或字符串是否包含 HTML 标签,请检查以下 JavaScript function:
function containsHTMLTags(str)
{
if(str.match(/([\<])([^\>]{1,})*([\>])/i)==null)
return false;
else
return true;
}
function 使用黑名单过滤。
参考资料: http://www.hscripts.com/scripts/JavaScript/html-tag-validation.php
^[^<>;#]*$
如果字符串与该正则表达式匹配,则它不包含括号中的字符。 我希望我能很好地理解你的问题。
不要为此使用正则表达式。
您不能使用textContent
或innerText
,因为至少前者会返回script
元素的主体。
如果我只支持较新的浏览器并且可以访问(或填充) Array.prototype.indexOf()
、 Array.prototype.reduce()
和Array.prototype.map()
,这就是我可能使用的...
var getText = function me(node, excludeElements) {
if (!excludeElements instanceof Array) {
excludeElements = [];
} else {
excludeElements.map(function(element) {
return element.toLowerCase();
});
}
return [].slice.call(node.childNodes).reduce(function(str, node) {
var nodeType = node.nodeType;
switch (nodeType) {
case 3:
return str + node.data;
case 1:
if (excludeElements.indexOf(node.tagName.toLowerCase()) == -1) {
return str + me(node, excludeElements);
}
}
return '';
}, '');
}
Regex.Replace(html, @"] >[\s\S] ?|<[^>]+>", "", RegexOptions.IgnoreCase).Trim();
这里 html 是一个字符串,其中包含需要从中删除 html 和脚本标签的页面的 html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.