我正在处理一个小问题,但我不知道如何解决这个问题。我必须验证生成的密码,但有一些限制:
我使用了Regex模式,但它在两种情况下都无法正常工作:有效和无效。
第一个RegEx模式:
def pattern = /(=?.{8,24})((:?[a-z]+)(:?[0-9]+)(:?[A-Z]+)(:?\W+))/
可以检查所有无效密码,但不能检查有效密码。
第二个RegEx模式:
def pattern = /(=?.{8,24})((:?[a-z]*)(:?[0-9]*)(:?[A-Z]*)(:?\W*))/
可以检查所有有效密码,但不能检查无效密码。
我是Groovy的新手,所以我不知道如何创建正确的RegEx模式来解决这个问题。 你能帮我吗?
答案 0 :(得分:2)
正则表达式并不是解决所有问题的方法,并且试图为特定问题提出单一正则表达式通常会浪费大脑周期。只需将它分成多个测试,例如(这个类似Perl的伪代码,但您应该能够将其转换为您正在使用的语言):
sub valid_pw
{
return false if (length($_) < 8 || length($_) > 24);
# don't use [a-z], it makes for nasty surprises in e.g. fi_FI
return false if (!/[[:lower:]]/);
return false if (!/[[:upper:]]/);
return false if (!/[[:digit:]]/);
return false if (!/[[:print:]]/);
return true;
}
答案 1 :(得分:0)
为什么你需要一个正则表达式呢? (也就是为什么你要在密码上放置一个最大长度,这是另一个讨论)
/^.{8,24}$/
/[a-z]/
/[A-Z]/
/\d/
/[^\d\w]/
我想你可以使用前瞻(比如/(?=.*[a-z])(?=.*[A-Z])...
)来组合它们,但如果你这样做,那么对它进行大量评论可能是一个非常好的主意。