在一些系统中经常可能会用到Cookie,但是Cookie的值是不能有特殊字符的,我也是在进过这个坑之后才想起来解决这个问题。另外,在sql中如果插入特殊字符也可能会阻碍sql正常执行,所以特殊字符处理还是有必要的。下面开始贴代码。
【方案一】:直接去掉特殊字符:
public static String replaceSpecialWord(String str) {
if (StringUtils.isNotEmpty(str)) {
String[] spaArr = { "\\","$","(",")","*","+",".","[", "]","?","^","{","}","|","'","%",",","," };
for (String key : spaArr) {
if (str.contains(key)) {
str = str.replace(key, "");
}
}
}
return str;
}
如果还有其他需要过滤的特殊字符,添加到上面的spaArr即可。
【方案二】:仅仅保留中文、英文,以及数字
public static String filterStr(String filterName){
String regEx1 = "[\\u4e00-\\u9fa5]";
String regEx2 = "[a-z||A-Z]";
String regEx3 = "[0-9]";
String s1 = matchResult(Pattern.compile(regEx1),filterName);
String s2 = matchResult(Pattern.compile(regEx2),filterName);
String s3 = matchResult(Pattern.compile(regEx3),filterName);
String name=s1+s2+s3;
if(name.isEmpty()){
name="没有符合要求的字符";//为了不符合中文、英文、数字三种情况出现空的情况,有一个变量通用字符串.
}
return name;
}
方案二的方式就是只取字符串中的中文、英文以及数字了,并且按照中文+英文+数字的顺序组合。如果想按照其他顺序,修改s1+s2+s3的组合顺序即可。
搞定了。
【备注】:方案一中需要引用StringUtils包,自己引即可。方案二中需要引入java.util.regex.Pattern包。