正则表达式包含和排除特殊字符

26
我正在寻找符合以下规则的正则表达式。
允许的字符:
字母:a-z / A-Z
数字:0-9
特殊字符:~ @ # $ ^ & * ( ) - _ + = [ ] { } | \ , . ? :
(空格应该被允许)
不允许的字符:
特殊字符:< > ' " / ; ` %

其余的字符呢?它们被允许还是不允许? - Peter Lawrey
你试过想出一个吗?你对它有什么具体的问题? - fivedigit
2
你只是想让我们知道你找到了它吗?谢谢。也许这个链接对你有帮助:http://www.regular-expressions.info/ - Felix Kling
https://regex101.com/,这个在线工具可以帮助我们轻松构建和编译所需的正则表达式。希望能对您有所帮助。 - Ravi Shankar Kota
3个回答

43

你可以使用的允许字符为:

^[a-zA-Z0-9~@#$^*()_+=[\]{}|\\,.?: -]*$

验证一个由允许字符组成的完整字符串。请注意-在末尾(否则它将成为一个范围),并且一些字符已被转义。

对于非法字符,您可以使用:

[<>'"/;`%]

你可以使用以下正则表达式将两者组合为一个:

^(?=[a-zA-Z0-9~@#$^*()_+=[\]{}|\\,.?: -]*$)(?!.*[<>'"/;`%])

但是你需要一个允许前瞻的正则表达式引擎。


请问您能否澄清一下如何使用您的正则表达式,以允许字符串中仅包含这些字符,并将其余所有字符转换为空格字符? - Rajat Gupta

13

您还没有实际提出问题,但是假设您有一个问题,这可能是您的答案...

假设允许使用除“特殊字符”以外的所有字符,您可以编写

String regex = "^[^<>'\"/;`%]*$";

请问您能否澄清一下如何使用您的正则表达式,以便只允许这些字符出现在我的字符串中,并将其余所有字符转换为单个空格字符? - Rajat Gupta
2
@user01 text = text.replaceAll("[<>'\"/;%]", " "); 或者如果你想要组合多个特殊字符和空格 text = text.replaceAll("[<>'\"/;% ]+", " "); - Peter Lawrey
非常感谢,但在我的情况下,不允许使用的字符是除了允许使用的字符之外的所有字符(允许使用的字符与问题中相同)。您能否建议如何指定允许使用的字符:a-z / A-Z / 0-9 ~ @ # $ ^ & * ( ) - _ + = [] {} | \,.?: - Rajat Gupta
1
在这种情况下,text = text.replaceAll("[^-A-Za-z0-9~@#$^&*()+=\\[\\]{}|\\\\,.?:]", " "); 中的 [^ ] 表示除了这些字符以外的任何字符。 - Peter Lawrey

4
[a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*

如果您只想允许匹配该内容,可以将其包装在^$或其他适当的定界符中。这将完成匹配操作,无需使用特定的禁止逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接