【发布时间】:2015-09-20 09:02:53
【问题描述】:
我是 Regex 新手,到目前为止,我只将它用于简单的事情,例如“必须是数字或字母”。现在我必须做一些更复杂的事情。
我需要用它来验证一个密码,它必须是8-16个字符,无控制/非打印/非ASCII字符,并且必须至少具有以下三个:
- 一个大写字母
- 一个小写字母
- 一个数字0-9
- 一个符号字符($、%、& 等)
我在想我要做的就是写“一个大写字母,小写字母和数字,或者一个大写字母,小写字母和一个符号,或者一个大写字母,一个数字或一个符号,或者。 ...”以涵盖所有可能的“4 种中的 3 种”组合,但这似乎太过分了。有没有更简单的解决方案?
【问题讨论】:
-
您是否有充分的理由不能仅仅简化您的要求并要求所有四个条件?
-
是的。不要使用正则表达式。正则表达式是一个强大的工具,就像锤子一样强大。但是,如果您尝试用锤子拧螺丝,那将需要一段时间...
-
我的直觉说这可能是用于课堂作业 - 因为在实践中,限制密码的长度使其更容易破解。也就是说,您会发现只使用
indexOf()(或您的语言等效项)来确定其中是否包含所需的字符之一。 -
好点,你是对的,没有什么特别的原因我不能要求所有四个条件。莱姆斯,谢谢你的提示。我想密码不需要最大长度。
-
@brandonscript,我来这里是因为一个服务器工具(Atlassian Crowd)使用这样的正则表达式格式来控制密码格式,没有其他选择。所以不一定是课堂作业。在我的公司,4 个条件中的 3 个是要求。