我正在寻找Java中的正则表达式java.util.regex
,只接受字母’
,-
和.
以及一系列Unicode字符,例如如变音符号,eszett,变音符和其他欧洲语言的有效字母。
我不想要的是数字,“ ”
或“ Tom”
等空格,或!”£$%
等特殊字符。
到目前为止,我发现它非常混乱。
我从这个
开始[A-Za-z.\\s\\-\\.\\W]+$
结束了这个:
[A-Za-z.\\s\\-\\.\\D[^!\"£$%\\^&*:;@#~,/?]]+$
,使用cavat来表示没有内方括号
任何人对新的正则表达式有什么建议或上述原因不起作用的原因?
答案 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