RegEx确保string至less包含一个小写字母,大写字母,数字和符号

什么是正则expression式,以确保给定的string包含至less一个字符从以下每个类别。

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

我知道单个集合的模式,即[az][AZ]\d_|[^\w] (我知道他们是正确的,不是吗?)。

但是,如何将它们结合起来以确保string以任意顺序包含所有这些内容?

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

 ^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*(_|[^\w])).+$ 

简单的解释:

 ^ // the start of the string (?=.*[az]) // use positive look ahead to see if at least one lower case letter exists (?=.*[AZ]) // 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 underscore or non-word character exists .+ // gobble up the entire string $ // the end of the string 

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

你可以分别匹配这三个组,并确保它们都存在。 另外, [^\w]似乎有点太宽泛,但如果这是你想要的,你可能想用\Wreplace它。