正则表达式接受任何3种字符但没有空格

时间:2016-08-24 22:15:18

标签: regex

我想允许正则表达式接受以下4个类别中的最少8个字符和3个组合。

  1. 一个大写字母字符
  2. 一个小写字母字符
  3. 一个数字字符
  4. 一个特殊字符
  5. 好处是,有许多正则表达式适用于我的要求,但大多数都允许空间

    以下正则表达式符合我的要求,但它也允许空间。

    ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])(?=.*[!@#\$%&/=?_\.,:;-\\]).*$
    

    这个也允许空间

    ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])(?=.*[\S])
    

    字符串应匹配:

    1. Testing123$
    2. Testing123
    3. Testing$
    4. 字符串不匹配:

      1. Test ing123
      2. TESTING
      3. Testing
      4. TESTING1
      5. testing1
      6. testing$
      7. 我试图通过多种方式对其进行修改,但我无法成功编写正确的正则表达式来验证空间以及3种组合,如上所述。

        正则表达式来源:Regex for checking that at least 3 of 4 different character groups exist

          

        更新答案:

        这个条件接受任何3或4个条件但没有空格。

        ^((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!@\#$%&/=?_.,:;\\-])|(?=.*[a-z])(?=.*[0-9])(?=.*[!@\#$%&/=?_.,:;\\-])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!@\#$%&/=?_.,:;\\-]))\S{8,}$

2 个答案:

答案 0 :(得分:1)

你的问题中的正则表达式在几个方面是不正确的。首先,它需要所有四种角色,而不是四分之三。但我会用它来说明其他错误:

  1. \W匹配任何非单词字符,包括空格(您不想要的)和标点字符(包括您的第四个前瞻中列出的字符)。 (?=.*[\d\W])应该只是(?=.*\d)

  2. [;-\\]描述了一个范围,其中包含所有大写字母和几个标点字符,您显然并不意味着允许这些字符。你需要逃避连字符,最好将它移到最后。

  3. 开头的.*只会使正则表达式效率降低,最后一个应该是\S*,以排除空格。但你也可以将它与长度检查结合起来:\S{8,}$。 (以前有一个很好的理由将长度检查放在首位,但我怀疑这些天有人使用Internet Explorer 8.)

  4. 结果:

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&/=?_.,:;\\-])\S{8,}$
    

    但是,正如我所说,这需要满足所有四个条件。您复制正则表达式的answer错过了问题的重点。如果您确实需要强制执行三个或四个条件,请使用the accepted answer中的正则表达式,并将最终.更改为\S

答案 1 :(得分:0)

尝试:

[! @#\$%&/=?_\.,:;-\\]

(为你的NOT添加了一个空格)