You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排除换行等特殊字符的用户输入验证正则编写求助

正则验证禁用字符解决方案

原有正则的问题

你尝试的两个正则均存在逻辑缺陷:

  • 第一个正则^(?!\s\t\'\=%*$).+的负向先行断言仅能匹配「完全由连续的\s、\t、'、=、%组成的字符串」,无法拦截普通内容中混有禁用字符的情况
  • 第二个正则^(?!\s*$)(?!\t*$)(?!\'*$)(?!=*$)(?!%*$).+的多个负向先行仅判断字符串是否全部为某一类禁用字符,同样无法拦截混合内容里的禁用字符

最终可用正则

完全符合要求(排除全空白、CR/LF换行、制表符、单引号、等号、百分号)的正则如下:

^(?!\s*$)[^'\t=%\r\n]+$

规则说明

  • ^、$:匹配输入字符串的首尾,确保校验覆盖整个输入内容
  • (?!\s*$):负向先行断言,排除全空白(含空输入、全空格/全角空格等空白字符)的无效输入
  • [^'\t=%\r\n]+:匹配1个及以上的非禁用字符,方括号内的^表示排除下列字符:
    • ':单引号
    • \t:制表符
    • =:等号
    • %:百分号
    • \r:回车符(CR)
    • \n:换行符(LF)

常见编程语言转义示例

  • Java:字符串内反斜杠需要二次转义,写法为
    String regex = "^(?!\\s*$)[^'\\t=%\\r\\n]+$";
    
  • JavaScript:正则字面量直接使用即可
    const regex = /^(?!\s*$)[^'\t=%\r\n]+$/;
    
  • Python:使用原始字符串避免转义冲突
    import re
    regex = r"^(?!\s*$)[^'\t=%\r\n]+$"
    

校验效果

  • 允许通过的输入:普通文本内容、123456、normal text
  • 会被拦截的输入:
    • 空输入/全空格输入:
    • 含换行的内容:第一行\r\n第二行
    • 含制表符的内容:前缀\t后缀
    • 含单引号的内容:test'value
    • 含等号的内容:key=value
    • 含百分号的内容:99%

内容的提问来源于stack exchange,提问作者WApp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:18:02