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]
似乎有点太宽泛,但如果这是你想要的,你可能想用\W
replace它。