【发布时间】:2016-03-21 07:38:27
【问题描述】:
我需要使用以下规则验证密码:
密码必须有 6-12 个字符 以及以下至少两项: 大写字母、小写字母、数字或符号。 以下是我当前的正则表达式:
^((?=.*[a-z])|(?=.*[A-Z])|(?=.*\\d)|(?=.*(_|[-+_!@#$%^&*.,?]))).{6,12}
我正在为如何达到“至少”条件而苦苦挣扎。
【问题讨论】:
-
仅使用正则表达式将非常困难。您也许可以通过将多个非消耗性前置条件表达式一个接一个地堆叠来做到这一点。
-
@LasseV.Karlsen:不难,只是看起来很尴尬。但是,6-12 个字符或更多是不清晰的。
-
我会将这些要求拆分为一对独立的正则表达式。您将单独测试每个条件,如果不满足两个以上的条件,则会提示错误。
-
好的,看起来实际上你可以将非消费组一个接一个地堆叠起来。由于我对此没有足够的经验,因此我不会将此作为答案发布,但您的正则表达式模式的结构将如下所示:
@"(?<=P1)(?<=P2)(?<=P3)$"其中 P1、P2 和 P3 是您需要检查密码的三件事.因此,例如要检查是否存在大写、小写、数字以及 6-12 的长度,您可以这样做:@"(?<=.*[A-Z].*[A-Z].*)(?<=.*[a-z].*[a-z].*)(?<=.*\d.*\d.*)(?<=.{6,12})$"。 -
三思而后行,我会将其作为答案发布,然后如果有人发现逻辑漏洞,则将其删除。
标签: ios objective-c regex