Java正则表达式至少需要一个字母和一个数字。也只允许选择特殊字符

时间:2017-06-19 23:51:12

标签: java regex

我尝试研究这个,让它部分工作但是当包含特殊字符时,它将无法工作。在特殊字符上 - 它不是必需的,但如果使用特殊字符,则它必须只是允许的特殊字符(@-(短划线))。

试过这个,但它不会工作。有人可以帮忙吗?顺便说一句,它至少应该有8个字符

^(?=.*?[a-zA-Z])(?=.*?[0-9@-]).{8,}$

一些例子:

"JohnDoe" should be invalid
"JohnDoe2" should be valid 
"22222222" should be invalid 
"22222222a" should be valid
"JohnDoe2@" should be valid
"JohnDoe2#" should be invalid
"johndoe2" should be valid

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

(?=(?:.*[a-zA-Z]){1,})(?=(?:.*[@-]){0,})(?=(?:.*[0-9]){1,})^[a-zA-Z0-9@-]*$

第一部分遵循here中的模式(?=(?:.*[GROUP]){NUMBER})

然后我添加了^[a-zA-Z0-9@-]*$部分,它基本上从字符串的开头^开始,到结尾$,其中唯一的字符应该来自集合{{ 1}}

以下是您提供的单元测试的Regex101