我想允许正则表达式接受以下4个类别中的最少8个字符和3个组合。
好处是,有许多正则表达式适用于我的要求,但大多数都允许空间。
以下正则表达式符合我的要求,但它也允许空间。
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])(?=.*[!@#\$%&/=?_\.,:;-\\]).*$
这个也允许空间
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])(?=.*[\S])
字符串应匹配:
Testing123$
Testing123
Testing$
字符串不匹配:
Test ing123
TESTING
Testing
TESTING1
testing1
testing$
我试图通过多种方式对其进行修改,但我无法成功编写正确的正则表达式来验证空间以及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,}$
答案 0 :(得分:1)
你的问题中的正则表达式在几个方面是不正确的。首先,它需要所有四种角色,而不是四分之三。但我会用它来说明其他错误:
\W
匹配任何非单词字符,包括空格(您不想要的)和标点字符(包括您的第四个前瞻中列出的字符)。 (?=.*[\d\W])
应该只是(?=.*\d)
。
[;-\\]
描述了一个范围,其中包含所有大写字母和几个标点字符,您显然并不意味着允许这些字符。你需要逃避连字符,最好将它移到最后。
开头的.*
只会使正则表达式效率降低,最后一个应该是\S*
,以排除空格。但你也可以将它与长度检查结合起来:\S{8,}$
。 (以前有一个很好的理由将长度检查放在首位,但我怀疑这些天有人使用Internet Explorer 8.)
结果:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&/=?_.,:;\\-])\S{8,}$
但是,正如我所说,这需要满足所有四个条件。您复制正则表达式的answer错过了问题的重点。如果您确实需要强制执行三个或四个条件,请使用the accepted answer中的正则表达式,并将最终.
更改为\S
。
答案 1 :(得分:0)
尝试:
[! @#\$%&/=?_\.,:;-\\]
(为你的NOT添加了一个空格)