插件窝 干货文章 如何用正则表达式禁止输入特殊字符(双引号、反斜杠、表情符号、空格和空行)?

如何用正则表达式禁止输入特殊字符(双引号、反斜杠、表情符号、空格和空行)?

正则 字符 表达式 input 926    来源:    2025-03-25

使用正则表达式禁止输入特殊字符

要禁止输入双引号(")、反斜杠(\)、表情符号、空格和空行,可以使用以下正则表达式:

正则表达式解决方案

^[^"\\\s\p{Emoji}]+$

解释:

  • ^ - 匹配字符串开头
  • [^...] - 否定字符类,匹配不在括号内的任何字符
  • " - 双引号
  • \\ - 反斜杠(需要转义)
  • \s - 任何空白字符(包括空格、制表符、换行等)
  • \p{Emoji} - Unicode表情符号
  • + - 一个或多个前面的元素
  • $ - 匹配字符串结尾

在不同语言中的实现

JavaScript

function isValidInput(input) {
  return /^[^"\\\s\p{Emoji}]+$/u.test(input);
}

Python

import re

def is_valid_input(input_str):
    return bool(re.fullmatch(r'^[^"\\\s\p{Emoji}]+$', input_str, re.UNICODE))

Java

public boolean isValidInput(String input) {
    return input.matches("^[^\"\\\\\\s\\p{Emoji}]+$");
}

PHP

function isValidInput($input) {
    return preg_match('/^[^"\\\\\s\p{Emoji}]+$/u', $input) === 1;
}

注意事项

  1. 确保使用Unicode模式(如JavaScript的u标志)以正确匹配表情符号
  2. 这个正则表达式会拒绝任何包含这些字符的输入
  3. 如果需要允许某些特殊字符,只需将它们从否定字符类中移除
  4. 空字符串会被拒绝,因为使用了+量词(如果允许空字符串,可以改为*)

替代方案

如果某些环境不支持\p{Emoji},可以使用更广泛的Unicode范围来匹配表情符号:

^[^"\\\s\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F700}-\u{1F77F}\u{1F780}-\u{1F7FF}\u{1F800}-\u{1F8FF}\u{1F900}-\u{1F9FF}\u{1FA00}-\u{1FA6F}\u{1FA70}-\u{1FAFF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{FE00}-\u{FE0F}\u{1F900}-\u{1F9FF}]+$

这个正则表达式显式列出了常见的表情符号Unicode范围,但可能不如\p{Emoji}简洁和全面。