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

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

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

在博客、论坛中在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>