首页 文章

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

提问于
浏览
120

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

  • 小写字符

  • 大写字符

  • 数字

  • 符号

我知道各个集合的模式,即 [a-z][A-Z]\d_|[^\w] (我弄错了,不是吗?) .

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

3 回答

  • 284

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

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

  • 5

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

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

    无论是在开头,结尾还是在中间,你都会以这种方式进行搜索 . 在你有我复杂的密码有很多麻烦 .

  • 7

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

相关问题