我尝试构建正则表达式模式,这需要字符串包含多个字母,但是没有成功。
这是我拥有的,但它不起作用:
(?=[A-Z]+)(?=[a-z]+)(?=[0-9]+)
换句话说,字符串只有在包含大写和小写以及任何顺序的数字时才匹配:
MyPass777 <-- match
Mypass777 <-- match
MyPass <-- no match
mypass777 <-- no match
那么,如何让这项工作?
答案 0 :(得分:1)
如果您想要是/否测试,请使用替换。
需要具有鞋面且最终具有较低OR的东西,其具有较低的且最终为较高的。
为了清晰起见添加了空格
(?: [a-z].*[A-Z] | [A-Z].*[a-z] )
第三个要求是数字,它在组合上更加昂贵。
你最好分三个阶段进行测试。这有大写吗?如果没有,失败。它有小写吗?如果没有,失败。它有数字吗?如果没有,失败。不然,没关系。
答案 1 :(得分:1)
此模式向前推进,并要求下一个字符同时为大写字母,小写字母和数字。它从不匹配。
你想要像
这样的东西(?=\w*[A-Z])(?=\w*[a-z])(?=\w*[0-9])(\w+\b)
至少,这是我对你的问题的最好理解:你想要一串包含至少一个大写字母,至少一个小写字母和至少一个数字的字母数字字符。
答案 2 :(得分:1)
您的积极前瞻也必须在您的条件之前使用.*
,以便在字母或数字之前允许任意数量的字符:
\b(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]+\b
另请注意在正则表达式的任意一侧使用\b
(字边界),以确保仅匹配完整的字词。
答案 3 :(得分:1)
使用这种方法,您不会限制用户输入大写+小写+数字,但如果他们使用例如大写+小写+标点符号,则密码将被视为同样好。
测试4个案例:
[A-Z]
[a-z]
[0-9]
[\!+\-*@#$%\^&*[\]{}:";'<>?,./]
'或参考Unicode字符类P
(标点符号)现在计算匹配案例。