排除换行等特殊字符的用户输入验证正则编写求助
正则验证禁用字符解决方案
原有正则的问题
你尝试的两个正则均存在逻辑缺陷:
- 第一个正则
^(?!\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
相关产品推荐
相关产品推荐

