用户名的Java正则表达式

用户名的Java正则表达式,java,regex,Java,Regex,我正在寻找Java中的正则表达式,Java.util.regex,只接受字母,-和,以及一系列Unicode字符,如umlauts、eszett、变音符号和其他来自欧洲语言的有效字母。 我不想要的是数字、空格(如”或“Tom”)或特殊字符(如!)英镑$%等 到目前为止,我发现它非常令人困惑 我是从这个开始的 [A-Za-z.\\s\\-\\.\\W]+$ 结果是: [A-Za-z.\\s\\-\\.\\D[^!\"£$%\\^&*:;@#~,/?]]+$ 使用cavat表示没有内部方

我正在寻找Java中的正则表达式,
Java.util.regex
,只接受字母
-
,以及一系列Unicode字符,如umlauts、eszett、变音符号和其他来自欧洲语言的有效字母。 我不想要的是数字、空格(如
“Tom”
)或特殊字符(如
!)英镑$%

到目前为止,我发现它非常令人困惑

我是从这个开始的

[A-Za-z.\\s\\-\\.\\W]+$
结果是:

[A-Za-z.\\s\\-\\.\\D[^!\"£$%\\^&*:;@#~,/?]]+$
使用cavat表示没有内部方括号,根据


有没有人对新的正则表达式有什么建议,或者有什么原因说明上面的正则表达式不起作用?

对于我的回答,我想使用一个与你类似的更简单的正则表达式:
[a-Z[^!]+
,意思是“至少有一次:(从a到Z的字符)或者(不是“!”的字符)。
注意“不是”!”“已包含A到Z。因此外部字符组(
[A-Z..
)中的所有内容都是无意义的

请尝试
[\p{Alpha}-.]+
并使用
模式.UNICODE_CHARACTER_CLASS
标志编译正则表达式。

使用:(?=.[@#$%&\s])-当至少有一个特殊字符(从集合中)且用户名包含空格时,返回true

您可以根据需要添加更多特殊字符。例如:

String str = "k$shor";
String regex = "(?=.*[@#$%&\\s])";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find()); => gives true

您收到的是错误消息,还是不匹配。在这两种情况下,请向我们提供详细信息,说明到底发生了什么情况。一个问题可能是您使用了
\\D
。请改为在求反字符类中使用
\\D
。此外,您应该在开头添加
^
。否则,如果只有最后一个字符,您的正则表达式将匹配您的字符串的三分之一是允许的。