正则表达式构建多酶所需的模式问题

时间:2015-09-12 13:46:40

标签: regex

我尝试构建正则表达式模式,这需要字符串包含多个字母,但是没有成功。

这是我拥有的,但它不起作用:

(?=[A-Z]+)(?=[a-z]+)(?=[0-9]+)

换句话说,字符串只有在包含大写和小写以及任何顺序的数字时才匹配:

 
MyPass777 <-- match
Mypass777 <-- match
MyPass    <-- no match
mypass777 <-- no match

那么,如何让这项工作?

4 个答案:

答案 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

RegEx Demo

另请注意在正则表达式的任意一侧使用\b(字边界),以确保仅匹配完整的字词。

答案 3 :(得分:1)

使用单独的正则表达式而不是单个正则表达式来获得额外的好处。

使用这种方法,您不会限制用户输入大写+小写+数字,但如果他们使用例如大写+小写+标点符号,则密码将被视为同样好。

测试4个案例:

  1. [A-Z]
  2. [a-z]
  3. [0-9]
  4. [\!+\-*@#$%\^&*[\]{}:";'<>?,./]'或参考Unicode字符类P(标点符号)
  5. 现在计算匹配案例

    • 1-2 案例:弱密码。
    • 3 案例:密码好。
    • 4 案例:强密码。