规则与正则表达式的组合

时间:2017-07-04 13:27:05

标签: android regex

在android项目中,我试图验证用户输入的密码,并且必须遵循一些规则

规则是: 它必须有7个字符和3个以下条件

**

  

- 一个小写字符

     

- 一个大写字符

     

- 一个号码

     

- 一个特殊字符

**

例如:

  

asd123 !!!

     

PPPppp000

     

TTT999 ###

我正在尝试这个正则表达式

func setRefreshControlVisible(_ isVisible: Bool) {}

但是这会同时强制执行所有规则。

2 个答案:

答案 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)

我显然建议使用更高级别的语言来实现这些类型的约束。