RegEx以确保字符串至少包含一个小写字符、大写字符、数字和符号

RegEx以确保字符串至少包含一个小写字符、大写字符、数字和符号,regex,Regex,什么是正则表达式以确保给定字符串至少包含以下每个类别中的一个字符 小写字符 大写字符 数字 象征 我知道单个集合的模式,即[a-z],[a-z],\d和[uu124;[^\ w](我得到的是正确的,不是吗?) 但是如何组合它们以确保字符串以任何顺序包含所有这些组?您可以分别匹配这三个组,并确保它们都存在。另外,[^\w]似乎有点太宽泛了,但如果这是您想要的,您可能需要将其替换为\w如果您需要一个正则表达式,请尝试: (?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

什么是正则表达式以确保给定字符串至少包含以下每个类别中的一个字符

  • 小写字符
  • 大写字符
  • 数字
  • 象征
我知道单个集合的模式,即
[a-z]
[a-z]
\d
[uu124;[^\ w]
(我得到的是正确的,不是吗?)


但是如何组合它们以确保字符串以任何顺序包含所有这些组?

您可以分别匹配这三个组,并确保它们都存在。另外,
[^\w]
似乎有点太宽泛了,但如果这是您想要的,您可能需要将其替换为
\w

如果您需要一个正则表达式,请尝试:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)
简短的解释:

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists

我同意SilentGhost,
\W
可能有点宽泛。我会用这样的字符集替换它:
[-+.@$%^&*,?]
(当然可以随意添加更多!)

Bart Kiers,您的正则表达式有几个问题。最好的方法是:

(.*[a-z].*)       // For lower cases
(.*[A-Z].*)       // For upper cases
(.*\d.*)          // For digits
(.*\W.*)          // For symbols (non-word characters)

这样,无论是在开始、结束还是在中间,您都在进行搜索。在您的帐户中,我在使用复杂密码时遇到很多问题。

什么平台/regex方言?Bart的答案是正确的,但前瞻断言在JavaScript中是不可靠的,比如说,没有什么特别之处——我正在学习正则表达式。有没有一种替代方法可以在javascript中使用?@bobince嘿,我想找出为什么前瞻断言在javascript中不可靠。有关于这个的文字吗?@ChrisB:有一个非常令人困惑的IE/JScript错误:谢谢。我不知道\W。只是查找它,发现它与Word不匹配。\W和[\W]之间有什么区别吗?[\W]只是多余的吗?@Amarghosh,是的,
\W
[\W]
的结果是相同的。如果我将最后一个
+
更改为
*
,会发生什么?我无法想出一个在
*
中失败的测试用例。在这种情况下,它们是相同的吗?“零个或多个字符”似乎很好-只是寻求确认。@Amarghosh:在这种情况下,没有区别。由于正面的外观,字符串已包含至少4个字符。因此,将
+
更改为
*
甚至
{4,}
都没有什么区别。如果您愿意补充一点说明,我很难理解这些lookaheads的组合如何保证每个字符集至少有一个present@Sharlike,我不知道如何重新措辞以便更容易理解。尤其是在这些小评论框中。我建议你读这篇文章:如果你还有问题,只需发布一个你自己的问题。祝你好运@ikertxu,尝试这样的操作:
^(?=.[a-z])(?=.[a-z])(?=.*\d)(?!.[&%$])。{6,}$
您没有按照OP请求检查符号。只有在按此顺序找到小写、大写和数字时,才会执行此操作。例如,ist不适用于111aaqBBB