什么是正则表达式以确保给定字符串包含以下每个类别中的至少一个字符。
我知道单个集合的模式,即[a-z]
,[A-Z]
,\d
和_|[^\w]
(我认为它们是正确的,不是吗?)。
但是我如何组合它们以确保字符串包含所有这些以任何顺序?
答案 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
。