插件窝 干货文章 如何用正则表达式有效过滤文本输入中的特殊字符、Emoji表情、空行和空格?

如何用正则表达式有效过滤文本输入中的特殊字符、Emoji表情、空行和空格?

字符 空格 过滤 空行 708    来源:    2025-03-25

使用正则表达式过滤文本输入

要有效过滤文本中的特殊字符、Emoji表情、空行和空格,可以使用以下正则表达式解决方案:

综合过滤方案

/[\x00-\x1F\x7F-\x9F\u2000-\uFFFF\s]+|^\s*$/gmu

这个正则表达式可以: 1. 匹配控制字符(ASCII 0-31, 127-159) 2. 匹配Emoji和其他Unicode特殊字符(2000-FFFF) 3. 匹配空白字符(\s) 4. 匹配空行(^$)

分解解决方案

1. 过滤特殊字符和Emoji

/[\x00-\x1F\x7F-\x9F\u2000-\uFFFF]/g
  • \x00-\x1F: ASCII控制字符
  • \x7F-\x9F: 扩展ASCII控制字符
  • \u2000-\uFFFF: 匹配所有Unicode特殊字符和Emoji(从U+2000开始)

2. 过滤多余空格

/\s+/g

匹配一个或多个空白字符(空格、制表符、换行符等)

3. 过滤空行

/^\s*$/gm
  • ^: 行开始
  • \s*: 零个或多个空白字符
  • $: 行结束
  • m标志: 多行模式

实际应用示例

JavaScript实现

function sanitizeText(input) {
  return input
    // 移除特殊字符和Emoji
    .replace(/[\x00-\x1F\x7F-\x9F\u2000-\uFFFF]/g, '')
    // 合并多个空格为单个空格
    .replace(/\s+/g, ' ')
    // 移除行首行尾空格
    .trim()
    // 移除空行
    .replace(/^\s*$/gm, '');
}

Python实现

import re

def sanitize_text(input_text):
    # 移除特殊字符和Emoji
    text = re.sub(r'[\x00-\x1F\x7F-\x9F\u2000-\uFFFF]', '', input_text)
    # 合并多个空格为单个空格
    text = re.sub(r'\s+', ' ', text)
    # 移除行首行尾空格
    text = text.strip()
    # 移除空行
    text = re.sub(r'^\s*$', '', text, flags=re.MULTILINE)
    return text

高级定制方案

如果需要更精确的控制,可以分别处理不同类型的字符:

// 仅保留字母、数字、基本标点和空格
/[\w\s.,!?;:'"-]/g

// 更严格的过滤 - 仅保留ASCII可打印字符
/[^\x20-\x7E]/g

// 仅过滤Emoji而不过滤其他特殊字符
/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/gu

根据您的具体需求选择合适的正则表达式方案,可以有效地清理和规范化文本输入。