正则表达式替换多行字符串

时间:2023-01-03 15:19:46

处理字符串,尤其是复杂且很长的字符串,正则表达式当然是首选。。。

在博客、论坛中在HTML编辑器中写文章时,过滤一些危险代码是非常且有必要的。

Javascript过滤:

// 替换代码中的Script代码
function shield_script(str) {
if(str == null || str == '') return '';
str = str.replace(/<script[^>]//*>/ig, '<!-- Script Code -->');
// 过滤包含多行的script代码
str = str.replace(/(<script[^>]*>[/w/W]*?<//script>)/igm, '<!-- Script Code -->');
return str;
}
// 替换代码中的Input和Button控件
function shield_input(str) {
if(str == null || str == '') return '';
str = str.replace(/<button[^>]//*>/igm, '<!-- Button Code -->');
str = str.replace(/<input[^>]//*>/igm, '<!-- Input Code -->');
str = str.replace(/(<button[^>]*>[/w/W]*?<//button>)/igm, '<!-- Button Code -->');
return str;
}
// 替换代码中的onclick代码
function shield_click(str) {
if(str == null || str == '') return '';
return str.replace(/(/s*onclick=[/"/'][/w/W]*?[/"/']/s*)/igm, '');
}

Ruby过滤: 

# Example:Ruby Script
def shield_script(str)
if str =~ /(<script[^>]*>[/w/W]*?<//script>)/
return str.gsub(/(<script[^>]*>[/w/W]*?<//script>)/, '<!-- SCRIPT CODE -->')
end
end
html = <<HTML_END
<div><span>哈哈</span>
<script type="text/javascript">
alert("跳转到网易");
location.href="http://www.163.com";
</script>
<div id="list">
<script>document.write('<a href="http://163.com">网易</a>');</script>
</div>
</div>
HTML_END

puts shield_script(html)

# 输出结果:
# <div><span>哈哈</span>
# <!-- SCRIPT CODE -->
# <div id="list">
# <!-- SCRIPT CODE -->
# </div>
# </div>