java正则表达式验证密码,密码只接受固定长度之间的值
我有正则表达式来验证密码,它只接受10到16之间的密码
但是,即使输入超过16个字符,它也会返回true
我的正则表达式是:
^(?=.{10,16})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$
你可以在下面搜索框中键入要查询的问题!
我有正则表达式来验证密码,它只接受10到16之间的密码
但是,即使输入超过16个字符,它也会返回true
我的正则表达式是:
^(?=.{10,16})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$
# 1 楼答案
使用
(?=.{10,16})
前瞻,您可以设置最小长度10
,,16
并不重要,因为您没有在末尾添加$
,告诉您在匹配16个字符后停止匹配您可以在
{10,16}
之后添加$
,也可以删除先行项并在最后一个$
之前添加{10,16}
我建议遵循以下规则:lookaheads的数量必须是条件数减1(参见rexegg.com for reference):
See the regex demo
详细信息
^
-字符串的开头(?=.*[0-9])
-至少一位数字(?=.*[a-z])
-至少一个小写ASCII字母(?=.*[A-Z])
-至少一个uppecase ASCII字母(?=.*[!@#$%^&+=])
-集合中定义的至少一个特殊字符.{10,16}
-任何10到16个字符$
-字符串的结尾李>在Java中,如果在
.matches()
方法中使用模式,则不需要前面的^
和后面的$
,因为它需要完整的字符串匹配爪哇:
# 2 楼答案
您可以简单地使用正则表达式
见regex 101 demo
如果您希望密码至少包含[0-9]、[a-z]、[a-z]、!@#$%^&;+=]中的1个,则可以将正则表达式更改为
# 3 楼答案
正则表达式的问题是,
.*$
。您正在匹配0到无限次之间的字符。 除此之外,一切看起来都很完美。我修改了正lookaheads的顺序,因为如果在末尾设置长度限制,则该顺序看起来很好