用正则表达式过滤HTML标签

html-css09

用正则表达式过滤HTML标签,第1张

import java.util.regex.Matcher

import java.util.regex.Pattern

/**

* <p>

* Title: HTML相关的正则表达式工具类

* </p>

* <p>

* Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记

* </p>

* <p>

* Copyright: Copyright (c) 2006

* </p>

*

* @author hejian

* @version 1.0

* @createtime 2006-10-16

*/

public class HtmlRegexpUtil {

private final static String regxpForHtml = "<([^>]*)>"// 过滤所有以<开头以>结尾的标签

private final static String regxpForImgTag = "<\\s*img\\s+([^>]*)\\s*>"// 找出IMG标签

private final static String regxpForImaTagSrcAttrib = "src=\"([^\"]+)\""// 找出IMG标签的SRC属性

/**

*

*/

public HtmlRegexpUtil() {

// TODO Auto-generated constructor stub

}

/**

*

* 基本功能:替换标记以正常显示

* <p>

*

* @param input

* @return String

*/

public String replaceTag(String input) {

if (!hasSpecialChars(input)) {

return input

}

StringBuffer filtered = new StringBuffer(input.length())

char c

for (int i = 0i <= input.length() - 1i++) {

c = input.charAt(i)

switch (c) {

case '<':

filtered.append("<")

break

case '>':

filtered.append(">")

break

case '"':

filtered.append(""")

break

case '&':

filtered.append("&")

break

default:

filtered.append(c)

}

}

return (filtered.toString())

}

/**

*

* 基本功能:判断标记是否存在

* <p>

*

* @param input

* @return boolean

*/

public boolean hasSpecialChars(String input) {

boolean flag = false

if ((input != null) &&(input.length() >0)) {

char c

for (int i = 0i <= input.length() - 1i++) {

c = input.charAt(i)

switch (c) {

case '>':

flag = true

break

case '<':

flag = true

break

case '"':

flag = true

break

case '&':

flag = true

break

}

}

}

return flag

}

/**

*

* 基本功能:过滤所有以"<"开头以">"结尾的标签

* <p>

*

* @param str

* @return String

*/

public static String filterHtml(String str) {

Pattern pattern = Pattern.compile(regxpForHtml)

Matcher matcher = pattern.matcher(str)

StringBuffer sb = new StringBuffer()

boolean result1 = matcher.find()

while (result1) {

matcher.appendReplacement(sb, "")

result1 = matcher.find()

}

matcher.appendTail(sb)

return sb.toString()

}

/**

*

* 基本功能:过滤指定标签

* <p>

*

* @param str

* @param tag

*指定标签

* @return String

*/

public static String fiterHtmlTag(String str, String tag) {

String regxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>"

Pattern pattern = Pattern.compile(regxp)

Matcher matcher = pattern.matcher(str)

StringBuffer sb = new StringBuffer()

boolean result1 = matcher.find()

while (result1) {

matcher.appendReplacement(sb, "")

result1 = matcher.find()

}

matcher.appendTail(sb)

return sb.toString()

}

/**

*

* 基本功能:替换指定的标签

* <p>

*

* @param str

* @param beforeTag

*要替换的标签

* @param tagAttrib

*要替换的标签属性值

* @param startTag

*新标签开始标记

* @param endTag

*新标签结束标记

* @return String

* @如:替换img标签的src属性值为[img]属性值[/img]

*/

public static String replaceHtmlTag(String str, String beforeTag,

String tagAttrib, String startTag, String endTag) {

String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\s*>"

String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\""

Pattern patternForTag = Pattern.compile(regxpForTag)

Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib)

Matcher matcherForTag = patternForTag.matcher(str)

StringBuffer sb = new StringBuffer()

boolean result = matcherForTag.find()

while (result) {

StringBuffer sbreplace = new StringBuffer()

Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag

.group(1))

if (matcherForAttrib.find()) {

matcherForAttrib.appendReplacement(sbreplace, startTag

+ matcherForAttrib.group(1) + endTag)

}

matcherForTag.appendReplacement(sb, sbreplace.toString())

result = matcherForTag.find()

}

matcherForTag.appendTail(sb)

return sb.toString()

}

}

<input onkeyup="usrNameSet(this)" />

其它的自己可以随便调用

Js部分

//只能输入数字、字母、小数点、汉字、@

function usrNameSet(num){

var str=num.value

//var str = document.getElementById("userName").value

var value=str.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.]/g,'')

document.getElementById("userName").value=value

}

//手机号码、手机验证码,只能输入数字

function numberSet(num){

var str=num.value

var value=str.replace(/[^0-9]/g,'')

num.value=value

}

//推广码验证,只能输入数字跟字母

function spreadCodeSet(num){

var str=num.value

var value=str.replace(/[^\w\.\/]/g,'')

num.value=value

}

//密码设置 不能为空格

function passwordSet(num){

/*

var str=document.getElementById("password").value

var value=str.replace(/^ +| +$/g,'')

document.getElementById("password").value=value

*/

var str=num.value

var value=str.replace(/^ +| +$/g,'')

num.value=value

}

//登陆验证码

//只能是4位字母或数字

function UserVerifycodeSet(){

var str=document.getElementById("verifycode").value

var value=str.replace(/[^a-zA-Z0-9]/g,'')

document.getElementById("verifycode").value=value

}

//姓名和身份证认证

function nameNumberSet(num){

if(num.id=='text_name')//姓名 只能输入汉字

{

var str=num.value

var value=str.replace(/[^\u4E00-\u9FA5]/g,'')

num.value=value

}

else if(num.id=='text_idcard'){//身份证只能是数字和字母

var str=num.value

var value=str.replace(/[^a-zA-Z0-9]/g,'')

num.value=value

}

}

//邮箱输入 //只能输入数字、字母、小数点、汉字、@、-

function myMailSet(num){

var str=num.value

var value = str.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.\-\_]/g,'')

num.value=value

}

//充值输入设置,小数点后只能两位

function moneyInput(num){

//var str=num.value

//alert(str)

//var value=str.replace(function(){

//if(this.value==this.value2)returnif(this.value.search(/^\d*(?:\.\d{0,2})?$/)==-1)this.value=(this.value2)?this.value2:''else

this.value2=this.value

//})

//var value=str.toFixed(2)

// var value = str.replace(/[^a-zA-Z0-9]/g,'')

// num.value=value

if(num.value==num.value2)return

if(num.value.search(/^\d*(?:\.\d{0,2})?$/)==-1)

num.value=(num.value2)?num.value2:''

else num.value2=num.value

}

//地址输入设置

//只能输入数字、字母、

function addressSet(num){

var str=num.value

var value=str.replace(/[^\u4e00-\u9fa5\w]/g,'')

num.value=value

}

//银行卡输入设置

function formatBankNoSet(BankNo){

//alert(BankNo.value)

var str=BankNo.value

var value=str.replace(/[^0-9]/g,'')

BankNo.value=value

}

//只能输入字母、汉字

function cnOrEn(num){

var str=num.value

var value=str.replace(/[^\a-zA-Z\u4E00-\u9FA5]/g,'')

num.value=value

}

1."COM组建"为"COM组件"。

2.建议还是不要手动解析HTML,那个似乎太费劲了。

3.在实际运用中,我也用过一些其它的XML解析工具,比如libxml,但感觉在WINDOWS还是MSXML最方便。