Java正则表达式验证特殊字符

4

这似乎是一个广为人知的标题,但我真的在面临这个问题。

以下是我目前拥有和已经完成的内容。

我已经验证了输入字符串,这些字符是不允许的:

&%$##@!~

所以我编写了以下代码:

 String REGEX = "^[&%$##@!~]";
 String username= "jhgjhgjh.#";
 Pattern pattern = Pattern.compile(REGEX);
 Matcher matcher = pattern.matcher(username);
 if (matcher.matches()) {
     System.out.println("matched");
 }

你为什么在字符类内部将##重复了一遍?- 只需要一个就足够了,除非你想允许##但不允许# - 这将需要另一个表达式。 - Code Jockey
我猜这是一个拼写错误 :) - adgfs
3个回答

5

将您的第一行代码更改为以下内容

String REGEX = "[^&%$#@!~]*";

它应该能够正常工作。字符类外的^表示行的开头。[]内部的^表示字符类中字符的否定。如果不想匹配空用户名,则可以使用以下正则表达式:

String REGEX = "[^&%$#@!~]+";


根据问题描述,似乎应该匹配空字符串,因此“+”应该改为“*”。 - smp7d
谢谢,已经更改了。另外添加了一条关于非空用户名的注释,以便让它更清晰明了。 - Narendra Yadala

2
我认为您想要这个:

我认为您需要这个:

[^&%$##@!~]*

2

为了匹配有效的输入:

String REGEX = "[^&%$#@!~]*";

匹配无效输入:

String REGEX = ".*[&%$#@!~]+.*";

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