用于用户名的Java Regex

时间:2012-10-31 13:11:27

标签: java regex

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

到目前为止,我发现它非常混乱。

我从这个

开始
[A-Za-z.\\s\\-\\.\\W]+$

结束了这个:

[A-Za-z.\\s\\-\\.\\D[^!\"£$%\\^&*:;@#~,/?]]+$

根据the documentation

,使用cavat来表示没有内方括号

任何人对新的正则表达式有什么建议或上述原因不起作用的原因?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用:(?=。* [@#$%& \ 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