RegEx以确保该字符串包含至少一个小写字母char,大写字母char,数字和符号

时间:2009-10-13 11:55:31

标签: regex

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

  • 小写字符
  • 大写字符
  • 数字
  • 符号

我知道单个集合的模式,即[a-z][A-Z]\d_|[^\w](我认为它们是正确的,不是吗?)。

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

3 个答案:

答案 0 :(得分:297)

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

(?=.*\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可能有点宽泛。我用这样的字符集替换它:[-+_!@#$%^&*.,?](当然可以添加更多!)

答案 1 :(得分:13)

巴特凯尔斯,你的正则表达式有几个问题。最好的方法是:

(.*[a-z].*)       // For lower cases
(.*[A-Z].*)       // For upper cases
(.*\d.*)          // For digits

无论是在开头,结尾还是在中间,你都会以这种方式进行搜索。在你的情况下,我遇到了很多复杂密码的麻烦。

答案 2 :(得分:5)

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