过滤特殊字符的正则如下:
/**
* 过滤特殊字符串正则(含中英文字符)
*/
public static final String STR_SPECIAL = "[`~!@#$%^&*()_+=|{}':;'\",\\[\\].<>/?·~!@#¥%……&*()——+|{}《》【】‘;:”“’。,、?]";
可以发现上面的字符中没有短横线"-",因为试了很多次发现存在短横线会导致意想不到的匹配结果。
解决方法:
1、短横线放在正则表达式开头或结尾,不需要转义如:
" [`~!@#$%^&*()_+=|{}':;'\",\\[\\].<>/?·~!@#¥%……&*()——+|{}《》【】‘;:”“’。,、?-] "
" [-`~!@#$%^&*()_+=|{}':;'\",\\[\\].<>/?·~!@#¥%……&*()——+|{}《》【】‘;:”“’。,、?] "
2、短横线位置任意,但需要转义,如:
"[`~!@#$%^&*(\\-)_+=|{}':;'\",\\[\\].<>/?·~!@#¥%……&*()——+|{}《》【】‘;:”“’。,、?]";