本文目录导读:

在Java中使用正则表达式过滤特殊字符,有几种常见的方法,以下是完整的案例说明:
基础过滤方法
使用 replaceAll() 方法
public class SpecialCharFilter {
// 保留字母、数字、中文和常见标点
public static String filterBasic(String str) {
if (str == null) return null;
// \\s 空格, \\w 单词字符(字母数字下划线), 中文范围
return str.replaceAll("[^\\w\\s\\u4e00-\\u9fa5.,!?;:'\"()()【】]", "");
}
public static void main(String[] args) {
String testStr = "Hello! 你好@#¥%……&*() World?【】{}";
String result = filterBasic(testStr);
System.out.println("原始字符串: " + testStr);
System.out.println("过滤后字符串: " + result);
}
}
更全面的过滤例子
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SpecialCharFilterDemo {
/**
* 只保留字母、数字、中文和基本标点
*/
public static String filterSpecialChars(String input) {
if (input == null || input.isEmpty()) return input;
// 定义允许保留的字符
String regex = "[^" +
"a-zA-Z" + // 英文字母
"0-9" + // 数字
"\\u4e00-\\u9fa5" + // 中文字符
"\\s" + // 空格
"_" + // 下划线
".,!?;:'\"()()【】" + // 常见标点
"]";
return input.replaceAll(regex, "");
}
/**
* 完全过滤所有特殊字符,只保留文字
*/
public static String removeAllSpecialChars(String input) {
if (input == null || input.isEmpty()) return input;
// 只保留字母、数字、中文和空格
String regex = "[^a-zA-Z0-9\\u4e00-\\u9fa5\\s]";
return input.replaceAll(regex, "");
}
public static void main(String[] args) {
// 测试数据
String[] testCases = {
"Hello! 你好@#¥%……&* World?",
"测试123ABC_英文-中文-标点。,!",
"邮箱: test@example.com (123)",
"电话号码: 138-0013-8000",
"特殊字符: ~!@#$%^&*()_+{}|:\"<>?",
"HTML标签: <div>内容</div>"
};
System.out.println("=== 过滤特殊字符测试 ===\n");
for (String test : testCases) {
System.out.println("原始: " + test);
System.out.println("基础过滤: " + filterSpecialChars(test));
System.out.println("完全过滤: " + removeAllSpecialChars(test));
System.out.println("---");
}
}
}
使用 Pattern 和 Matcher
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class AdvancedFilterDemo {
/**
* 使用Pattern.compile()预编译正则表达式
*/
private static final Pattern SPECIAL_CHARS_PATTERN =
Pattern.compile("[^a-zA-Z0-9\\u4e00-\\u9fa5\\s]");
public static String advancedFilter(String input) {
if (input == null) return null;
Matcher matcher = SPECIAL_CHARS_PATTERN.matcher(input);
return matcher.replaceAll("");
}
/**
* 自定义过滤规则 - 替换为指定字符
*/
public static String replaceWithChar(String input, String replacement) {
if (input == null) return null;
Pattern pattern = Pattern.compile("[^\\w\\s\\u4e00-\\u9fa5]");
return pattern.matcher(input).replaceAll(replacement);
}
public static void main(String[] args) {
String testStr = "Hello! 你好@#¥%……&* World?【】{}";
System.out.println("原始: " + testStr);
System.out.println("直接过滤: " + advancedFilter(testStr));
System.out.println("替换为空格: " + replaceWithChar(testStr, " "));
System.out.println("替换为*号: " + replaceWithChar(testStr, "*"));
}
}
实际应用案例 - 表单输入过滤
public class InputValidator {
/**
* 过滤用户输入,防止XSS攻击
*/
public static String sanitizeUserInput(String input) {
if (input == null || input.isEmpty()) return input;
// 1. 过滤HTML标签
String clean = input.replaceAll("<[^>]*>", "");
// 2. 过滤特殊字符(允许的基本字符)
clean = clean.replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5\\s.,!?;:()()【】]", "");
// 3. 去除多余空格
clean = clean.trim().replaceAll("\\s+", " ");
return clean;
}
/**
* 用户名过滤(只允许字母、数字、中文和下划线)
*/
public static String filterUsername(String username) {
if (username == null) return null;
return username.replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5_]", "");
}
/**
* 手机号过滤(只保留数字)
*/
public static String filterPhoneNumber(String phone) {
if (phone == null) return null;
return phone.replaceAll("[^0-9]", "");
}
public static void main(String[] args) {
// 模拟用户输入
String userInput = "<script>alert('XSS')</script>Hello! 电话: 138-0013-8000#¥%……&*";
String username = "张三@#$%^&李四_nice";
String phone = "138-0013-8000 ext.123";
System.out.println("输入过滤: " + sanitizeUserInput(userInput));
System.out.println("用户名过滤: " + filterUsername(username));
System.out.println("手机号过滤: " + filterPhoneNumber(phone));
}
}
常用正则表达式汇总
public class RegexPatterns {
// 常用正则表达式常量
public static final String ONLY_LETTERS = "[^a-zA-Z]"; // 只保留字母
public static final String ONLY_NUMBERS = "[^0-9]"; // 只保留数字
public static final String LETTERS_NUMBERS = "[^a-zA-Z0-9]"; // 只保留字母和数字
public static final String CHINESE_CHARS = "[^\\u4e00-\\u9fa5]"; // 只保留中文
public static final String CHINESE_LETTERS = "[^a-zA-Z\\u4e00-\\u9fa5]"; // 中文和英文
/**
* 通用过滤方法
*/
public static String filter(String input, String regex) {
if (input == null) return null;
return input.replaceAll(regex, "");
}
public static void main(String[] args) {
String test = "Hello123你好!@#¥%……&*";
System.out.println("原字符串: " + test);
System.out.println("只保留字母: " + filter(test, ONLY_LETTERS));
System.out.println("只保留数字: " + filter(test, ONLY_NUMBERS));
System.out.println("字母和数字: " + filter(test, LETTERS_NUMBERS));
System.out.println("只保留中文: " + filter(test, CHINESE_CHARS));
System.out.println("中英文: " + filter(test, CHINESE_LETTERS));
}
}
关键要点:
- 表示匹配不在集合中的字符
\\w表示单词字符(字母、数字、下划线)\\s表示空白字符(空格、制表符等)\\u4e00-\\u9fa5表示中文字符范围replaceAll()用空字符串替换匹配到的内容
根据你的具体需求选择合适的过滤规则,可以灵活组合不同的字符集。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播