我必须验证密码才能符合这些规则
A)密码必须包含以下4个类中的3个字符:
B)密码长度必须至少为8个字符;
这可以在一个正则表达式中完成。那个正则表达式会是什么?
答案 0 :(得分:5)
此任务不适合使用正则表达式。
可以以正则表达式完成,但它会如此复杂和复杂,以至于你最好以其他方式进行检查。
仅仅因为使用正则表达式可以完成某些事情并不意味着这是一个好主意。
答案 1 :(得分:0)
我认为使用复杂的正则表达式不是应该不惜一切代价使用的方法。在这种情况下,使用带有四个布尔值的简单方法将更容易编写,更易于阅读,也可能更快。
答案 2 :(得分:0)
你可以检查它是:
要检查此内容的单个正则表达式将类似于
(?![A-Za-z0-9]+$|[a-z{},.<>;:'?/|`~!@#$%^&*()_-+= -]+$).{8,}
我故意忽略了您的确切规格。特别是,我不想允许Pass1234
,我认为设置最大长度没有意义,我根本没有限制允许的字符集(即有最低要求,但是如果你愿意,你可以疯狂地使用控制字符或重音字符。如果您不同意,这些事情很容易解决。
要严格执行您的规范,您可以检查密码是否仅包含任何两个组;所以不是所有的大写和小写,而不是所有的小写和数字,而不是所有的大写和数字,而不是所有的数字和特殊,而不是所有的小写和特殊,而不是所有的大写和特殊,但再次,这有点乏味和恕我直言反效果。
您并未说明您正在使用哪种正则表达式。我假设您有Perl负面预测(?!...)
可供您使用。如果您受限于传统的BRE或ERE语法,这将更加困难。
答案 3 :(得分:-1)
我认为您使用单个正则表达式可以获得非常接近的结果。这是一个例子:
^((= * [@#$%&安培;!?,()_ = / \ \ - \ * \ + \]?!)[A-ZA-Z0-9 @#$%&安培;?,()_ = / \ \ - \ * \ + \] {8,20})$
这说: