在android项目中,我试图验证用户输入的密码,并且必须遵循一些规则
规则是: 它必须有7个字符和3个以下条件
**
- 一个小写字符
- 一个大写字符
- 一个号码
- 一个特殊字符
**
例如:
asd123 !!!
PPPppp000
TTT999 ###
我正在尝试这个正则表达式
func setRefreshControlVisible(_ isVisible: Bool) {}
但是这会同时强制执行所有规则。
答案 0 :(得分:3)
这里的方法是错误的。你创建的正则表达式看起来就像是床底下的一个怪物,即使对于一个正规文化的人也是非常难以理解的。
为什么不将它分成4(或者有规则)regex并检查其中3个是否返回匹配?您不仅可以使您的正则表达式更清晰,而且如果需要,您将能够添加更多规则而无需更改整个正则表达式。
您还可以使用内置方法进行检查(如果适用于Android开发工具包)。
某些伪代码看起来像这样:
HTML
您还可以应用@pskink在评论中建议的方法,并迭代密码的每个字符并相应地设置输出。
答案 1 :(得分:2)
如果没有深入了解您的前瞻细节(这看起来是正确的),请按照以下方式实现"四个标准中的三个"在纯正则表达式中:
(?=.*A)(?=.*B)(?=.*C)|(?=.*A)(?=.*B)(?=.*D)|(?=.*A)(?=.*C)(?=.*D)|(?=.*B)(?=.*C)(?=.*D)
您可以对其进行测试here。
因素分解并没有真正改善它:
(?=.*A)(?:(?=.*B)(?=.*(?:C|D))|(?=.*C)(?=.*D))|(?=.*B)(?=.*C)(?=.*D)
我显然建议使用更高级别的语言来实现这些类型的约束。